我正在尝试抓取用户访问的每个新网页的网址。我找到了一个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");
重新加载扩展程序然后打开新标签页并转到各种网站后,没有任何内容被触发。有人可以帮我弄清楚我做错了什么吗?谢谢!
答案 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);
}
});