Chrome扩展内容脚本不会触发代码

时间:2015-11-28 04:08:33

标签: javascript google-chrome google-chrome-extension

我正在尝试抓取用户访问的每个新网页的网址。我找到了一个SO答案,说使用content_scripts所以我把它放在我的清单中:

"permissions": [
  "tabs"
],
"content_scripts": [
{
  "matches": ["<all_urls>"],
  "js": ["js/background.js"]
}

我也试过这样的比赛:

"matches": ["http://*/*", "https://*/*"],

这是我的background.js文件:

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
    alert(changeInfo.url);
});

chrome.tabs.onActivated.addListener(function(activeInfo) {
  // how to fetch tab url using activeInfo.tabid
  chrome.tabs.get(activeInfo.tabId, function(tab){
     console.log(tab.url);
  });
});

alert("BACON");

重新加载扩展程序然后打开新标签页并转到各种网站后,没有任何内容被触发。有人可以帮我弄清楚我做错了什么吗?谢谢!

1 个答案:

答案 0 :(得分:4)

根据content scripts documentation

  

内容脚本有一些限制。他们不能使用chrome。* API,但以下情况除外:

     
      
  • 扩展名(getURL,inIncognitoContext,lastError,onRequest,sendRequest)
  •   
  • I18N
  •   
  • 运行时(connect,getManifest,getURL,id,onConnect,onMessage,sendMessage)
  •   
  • 存储
  •   

解决方案:要访问chrome.tabs API,您应该使用后台页面脚本。

另请注意,根据chrome.tabs API documentation

  

您可以使用大多数chrome.tabs方法和事件,而无需在扩展程序的清单文件中声明任何权限。但是,如果您需要访问tabs.Tab的网址,标题或favIconUrl属性,则必须在清单中声明"tabs"权限

<强>的manifest.json

...
"permissions": [
  "tabs"
],
"background": {
  "scripts": ["background.js"]
},
...

<强> background.js

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
  if (changeInfo.status==='loading' && changeInfo.url) {
    alert(changeInfo.url);
  }
});