我是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如何从活动选项卡中提取URL,也许事件是如何触发的…
任何提示都很感激。
在你的回答中,你引用了这个问题,但你从一堆答案中选择了一个奇怪的答案。
不要自己检测页面加载,最好依靠Chrome的内容脚本机制,这将确保您的脚本在加载请求网页的每个选项卡中执行。
-
如果您提前知道网页列表,您可以在清单中根据它们进行过滤:
"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 (skeleton):
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"
。
如果你真的想让你的逻辑在后台页面,你可以听各种事件。由changeInfo.status == 'complete'
过滤的chrome.tabs.onUpdated
应该在大多数情况下工作,但可能并不总是一个好主意。如果页面有加载缓慢的资源,它会很晚才触发,如果页面使用基于锚点的导航(您可能不希望这样),它可能会再次触发。即使采用这种方法,在此之后执行选项卡查询也没有什么意义,因为事件包含触发它的页面的选项卡ID。
还有chrome.webNavigation
API提供相关事件
尝试更改
if(url === "example.com")
如果(url = = = " example.com " | | url = = = " http://example.com " | | url = = = " https://example.com ")