0

以前曾以类似的方式提出过这个问题,但是他们的答案都没有解决我的特定问题。我不确定 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,因为我的图标将根据它是否在有效页面上而改变颜色。

谢谢!

4

1 回答 1

1

来自 chrome.tabs.onUpdated.addListener 的回调具有可帮助您获得所需行为的参数。这是做到这一点的正确方法。

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

该函数被调用“太多次”,因为它提供了您不需要的信息。您需要做的就是过滤您所采取的行动。

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

于 2013-08-04T18:37:42.487 回答