以前曾以类似的方式提出过这个问题,但是他们的答案都没有解决我的特定问题。我不确定 API 的某些部分是否已被弃用,但这里有:
在清单中使用带有选项卡权限的 background.js,检测当前选项卡的页面 URL 的最有效方法是什么?我了解您可以使用以下选项卡 URL:
chrome.tabs.getSelected(null, function(tab) {
var url = tab.url;
});
当然,上述方法必须由特定事件触发。每当更改选项卡时,并且当新页面在当前选项卡中充分加载时,我都需要触发此问题。
我玩了一个小时左右,然后想出了让两个监听器执行一个函数的想法。但是 onUpdated 监听器有这种被多次调用的奇怪习惯。
chrome.tabs.onActivated.addListener(function() {
// This works perfect.
chrome.tabs.getSelected(null, function(tab) {
console.debug("Tab is: " + tab.url);
});
});
chrome.tabs.onUpdated.addListener(function() {
// This somehow runs multiple times depending on the page.
chrome.tabs.getSelected(null, function(tab) {
console.debug("Tab changed to: " + tab.url);
});
});
我知道我可以通过忽略重复来破解这个问题,但肯定有更有效的方法来做到这一点?只是想我会提到,当使用 onUpdated 侦听器时,它与输出的 URL 相同。
我不会将它传递给控制台,而是将 URL 传递给一个函数,该函数然后检查它是否匹配两个接受域的有效变体。我将对 URL 的路径和参数进行进一步验证,这不是我的问题。
它还需要检测它何时不再是批准的 URL,因为我的图标将根据它是否在有效页面上而改变颜色。
谢谢!