我是Javascript和Chrome扩展程序的新用户,我正在开发一个在用户访问某个网页时触发提示但是在用户访问该网页时没有提示的提示。
这是一个简化版本,可以重现问题:
chrome.tabs.query({'active': true, 'lastFocusedWindow': true}, function (tabs) {
var url = tabs[0].url;
if (url === "example.com") {
confirm("You are visiting " + URL);
}
});
我希望这会在用户访问“Example.com”时触发提示,但我认为我误解了Chrome如何从活动标签中提取网址,以及也许这个事件是如何被触发的......
任何提示都表示赞赏。
答案 0 :(得分:3)
在你的回答中,你引用了this question,然而你从那里的一堆答案中选择了一个奇怪的答案。
最好依靠Chrome的content script机制来确保您的脚本在加载所请求网页的每个标签中执行,而不是自己检测网页加载。
如果您事先知道网页列表,可以在清单中按照它们进行过滤:
"content_scripts" : [{
"matches": ["*://*.example1.com/*", "*://*.example2.com/"],
"js": ["confirm.js"]
}],
然后有一个非常简单的confirm.js:
confirm("You are visiting " + location.href);
这将非常有效,因为Chrome会原生过滤您的请求。
如果您事先不知道网页列表,可以在每个页面上使用内容脚本并在代码中对其进行过滤:
"content_scripts" : [{
"matches": ["*://*/*"],
"js": ["confirm.js"]
}],
还有confirm.js(骨架):
chrome.storage.local.get("hostFilterData", function(data){
if( checkUrl(location.host, data.hostFilterData) ) {
confirm("You are visiting " + location.href);
}
});
function checkUrl(location.host, filterData){
/* your logic goes here */
}
如果您希望JS尽早运行,您可能还想添加"run_at" : "document_start"
。
如果您真的希望将逻辑保留在后台页面中,则可以收听各种事件。在chrome.tabs.onUpdated
过滤的changeInfo.status == 'complete'
应该适用于大多数情况,但可能并不总是一个好主意。如果页面具有缓慢加载的资源,它将很晚才会触发,如果页面使用基于锚点的导航(您可能不希望这样),则可能会再次触发。即使你走这条路线,之后做一个标签查询也没什么意义,因为事件包括触发它的页面的标签ID。
还有chrome.webNavigation
API提供相关活动。
答案 1 :(得分:0)
尝试更改
if(url ===“example.com”)
到
if(url ===“example.com”|| url ===“http://example.com”|| url ===“https://example.com”)