监听URL和运行Function的最有效方法

时间:2013-08-04 17:43:10

标签: google-chrome google-chrome-extension

之前已经以类似的方式提出过这个问题,但是他们的答案都无法解决我的特定问题。我不确定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的路径和参数进行进一步的验证,这不是我的问题。

还需要检测它何时不再是经过批准的网址,因为我的图标会根据是否在有效网页上而改变颜色。

谢谢!

1 个答案:

答案 0 :(得分:1)

来自chrome.tabs.onUpdated.addListener has parameters的回调可以帮助您获得所要求的行为。这是正确的方法。

chrome.tabs.onUpdated.addListener(
  function(tabId, changeInfo, tab)
 {
    //check changeInfo to see which change it is
 });

该功能被称为“太多次”,因为它提供了您不需要的信息。您需要做的就是过滤您所做的更改。

如果更改是状态,您可以查看是否已加载页面。如果更改有网址,则更改某个标签的网址。然后,您可以使用其他参数查看更改了哪个选项卡,并在相应的选项卡上进行操作。