之前已经以类似的方式提出过这个问题,但是他们的答案都无法解决我的特定问题。我不确定API的某些部分是否已经被弃用,但这里是:
在清单中使用具有选项卡权限的background.js,检测当前选项卡的页面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的路径和参数进行进一步的验证,这不是我的问题。
还需要检测它何时不再是经过批准的网址,因为我的图标会根据是否在有效网页上而改变颜色。
谢谢!
答案 0 :(得分:1)
来自chrome.tabs.onUpdated.addListener has parameters的回调可以帮助您获得所要求的行为。这是正确的方法。
chrome.tabs.onUpdated.addListener(
function(tabId, changeInfo, tab)
{
//check changeInfo to see which change it is
});
该功能被称为“太多次”,因为它提供了您不需要的信息。您需要做的就是过滤您所做的更改。
如果更改是状态,您可以查看是否已加载页面。如果更改有网址,则更改某个标签的网址。然后,您可以使用其他参数查看更改了哪个选项卡,并在相应的选项卡上进行操作。