chrome.tabs.onupdated.addlistener不适用于缓存页面

时间:2016-03-23 20:16:45

标签: google-chrome-extension

{{1}}

我有这样的背景。它几乎总是工作%99而不是%100

每当我重新启动浏览器并在浏览器加载缓存中的所有内容时输入已访问过的网页,它就不会触发此chrome.tabs事件

但有趣的是,当我从拨号速度点击同一个网站时,它不会从缓存中加载并调用“标签”。动作

2 个答案:

答案 0 :(得分:2)

根据https://developer.chrome.com/extensions/webNavigation

  

并非所有导航标签都与Chrome用户界面中的实际标签相对应,   例如,正在预渲染的标签。此类标签无法访问   通过选项卡API,您也可以通过它请求有关它们的信息   webNavigation.getFrame或webNavigation.getAllFrames。一旦这样的标签   交换后,onTabReplaced事件被触发并且它们变成了   可通过这些API访问。

  

如果通过Chrome即时或即时页面触发导航,请执行以下操作:   完全加载的页面被交换到当前选项卡。在这种情况下,   触发了onTabReplaced事件。

尝试使用chrome.webNavigation.onTabReplaced事件来捕捉这个:

chrome.webNavigation.onTabReplaced.addListener(function (details) {
   chrome.tabs.get(details.tabId, function(tab) {
       console.log(tab.url);
   }
}

注意:您需要" webNavigation" extension manifest中的权限:

{
    "name": "My extension",
    ...
    "permissions": [
      "webNavigation"
    ],
    ...
  }

答案 1 :(得分:0)

我用25个打开的标签测试了这个:

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab){
    console.log("update: "+JSON.stringify(changeInfo));
});

重新启动浏览器后,我收到25" loading"事件,但只有23"完成"。 在第二次重新启动浏览器时,我收到了25" loading"事件,但只有22"完成"。

我不认为changeInfo.status =='完成'将始终遵循页面加载,尤其是在重新启动后。

请考虑在您的扩展程序加载后立即使用chrome.tabs.query()

chrome.tabs.query({}, function(tabs) {
    for(var i=0;i<tabs.length;i++){
        if (tabs[i].url.indexOf('http') == '0') {
            dostuff();
        }
    }
});