2012-10-14 180 views
4

我希望能够获得用户所在标签的当前网址,而不必强制用户点击弹出按钮。我已经得到一个脚本来确定用户点击弹出图标的位置,并且所有事情都按照它应有的方式工作,但为了尝试并实现我目前的目标(不按下按钮即可这样做),我将代码复制并粘贴到背景页面,并没有得到任何结果。我的猜测是我需要一些积极的倾听者或者其他的东西。Chrome扩展 - 从没有弹出窗口的背景页面获取标签url

这是我得到的弹出按钮

<script type="text/javascript" src="http://code.jquery.com/jquery-1.8.1.min.js"></script> 
<script> 
window.addEventListener("load", windowLoaded, false); 
function windowLoaded() { 
    chrome.tabs.getSelected(null, function(tab) { 
     //doing stuff with the url 
    }); 
} 
</script> 

回答

-3

在你的Chrome浏览器扩展工作的JavaScript,您可能需要在后台运行的文件。 Check out this Developer article在创建页面时调用background.js

这将允许您在您的文件中放置代码,该代码在启用扩展时仍然存在。

+0

您好,在这个问题中,用户声称已在使用一个背景页面。另外,如果链接包含此问题的答案,则应将其发布在答案中以避免链接腐烂。祝你好运! :) – jmort253

+0

如果我有一个'background.js'页面,我该如何使用jquery – bs7280

+0

以及如何修改'window.addEventListener(“load”,windowLoaded,false);' – bs7280

5

按照文档打包应用程序,这可能会或可能不会进行功能扩展相同,您可以使用从chrome.app API的的onLaunched事件来运行代码时,应用程序启动:

// start doing something when the app first loads.... 
chrome.app.runtime.onLaunched.addListener(function() { 
    // all your monitoring code will go here 

}); 

注如果构建扩展,并且扩展应该在浏览器加载后立即开始监听,则可能不需要声明“onLaunched”侦听器。

此外,假设您想要始终知道用户在当前活动选项卡中的URL,则需要监视活动选项卡的更改。该Chrome Tabs API包含了大量的信息,这将有助于你的标签从推广工作,例如,这里是监视更改活动标签的代码:

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) { 
    console.info("This is the url of the tab = " + changeInfo.url); 
    // do stuff with that url here.... 
}); 

如果用户在活动的URL改变标签,这个处理器将监测这种变化:

chrome.tabs.onActivated.addListener(function(activeInfo) { .. } 

然而,onActivated文档说以下内容:

时触发在窗口中进行更改活动标签。请注意,此事件触发时,标签的URL可能不会被设置,但您可以侦听onUpdated事件,以便在设置URL时收到通知。

因此,您很可能只是使用onUpdated事件示例。

当您在背景页面中遇到您希望注入JavaScript的页面时,例如,要使用JavaScript更改网页的背景颜色,可以使用下面的代码:

chrome.tabs.executeScript(null, 
          {code:"document.body.bgColor='red'"}); 

记住,你的背景页不能直接运行JavaScript或操纵的web页面的DOM;因此,您需要以这种方式注入代码,其中包括注入诸如jQuery和其他您需要的资源。

不要忘记在清单中允许选项卡权限和背景页面。JSON:

/* in manifest.json */ 
"permissions": [ 
    "tabs", "http://*/*" 
], 
"background": { 
    "scripts": ["background.js"] 
}, 

要jQuery注入的页面,你基本上写建立一个脚本元素代码,然后你会注入到这一点的页面:在双

chrome.tabs.executeScript(null, 
    {code: 
     "var script = document.createElement('script');" + 
     "script.setAttribute('src', '//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js');" + 
     "script.setAttribute('type','text/javascript');" + 
     "document.getElementsByTagName('head')[0].appendChild(script);" 

    } 
); 

代码报价不会在您的后台页面中运行。相反,它在注入页面时运行。我在双引号内使用单引号,因此解析器不会感到困惑,并且会抛出字符串文字错误。

请注意,可能有更好,更干净的方法将这些代码注入页面,但对于小的轻微注入,这就足够了。

请记住,如果jQuery已被注入页面,您可能会遇到冲突。

+0

我可以看到如何让jquery工作的具体示例吗?我正在使用由谷歌托管的jquery文件 – bs7280

+0

查看我最后包含的示例。 – jmort253

+0

'tabs.executeScript期间出错:未知错误。 ' – bs7280

3

另一种方法:从 内容脚本得到它,并将其发送到后台页面:

url = window.location.href; 

    chrome.runtime.sendMessage({greeting: url}, function(response) { 
    }); 
在background.js

chrome.runtime.onMessage.addListener(function(message,sender,sendResponse){ 
     var url=message.greeting; 
} 
+0

似乎是在background.js中运行的错误 –

相关问题