我正在尝试获取用户访问的每个新页面的URL。我找到了一个说要使用的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");
重新加载扩展程序,然后打开新的选项卡并转到各个网站后,什么都不会触发。有人可以帮我弄清楚我在做什么错吗?谢谢!
根据内容脚本文档:
内容脚本有一些限制。他们不能使用chrome。* API,但以下情况除外:
- 扩展名(getURL,inIncognitoContext,lastError,onRequest,sendRequest)
- i18n
- 运行时(connect,getManifest,getURL,id,onConnect,onMessage,sendMessage)
- 贮存
解决方案:为了访问chrome.tabs
API,您应该使用后台页面脚本。
另请注意,根据chrome.tabs API文档:
您可以使用大多数
chrome.tabs
方法和事件,而无需在扩展的清单文件中声明任何权限。但是,如果您需要访问的url,title或favIconUrl属性tabs.Tab
,则必须"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);
}
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句