chrome.tabs.onUpdated.addListener - 立即报告changeInfo.status =='完成'

时间:2015-08-10 14:49:29

标签: javascript google-chrome google-chrome-extension

我的扩展是针对Facebook。它会在第一次加载时正确记录选项卡状态更改,但如果我通过当前页面上的链接导航到另一个页面,则会立即报告changeinfo.status =='完成'。

我找不到任何暗示我犯了错误

chrome.tabs.onUpdated.addListener(check);


function check(tab_id, changeinfo, tab){
    console.log("tab change: " + changeinfo.status);
    // make sure the page is done loading
    if ( !(tab.url !== undefined && changeinfo.status == "complete")) {
        return;
    }
    if(tab.url.match(/facebook.com\/[^\/]*$/)){ //if the url of the tab matches a certain website 
        chrome.pageAction.show(tab_id); //show the icon (by default it is not shown).

        console.log("accepted state: " + changeinfo.status);
    }
}

2 个答案:

答案 0 :(得分:1)

如果符合您的需要,您可以尝试使用webNavigation API

清单

"permissions": ["webNavigation"]

后台脚本

chrome.webNavigation.onCompleted.addListener(function(details) {
  if (details.url.startsWith('https://www.facebook.com/')) {
    chrome.pageAction.show(details.tabId); 
  }
});

答案 1 :(得分:0)

你没有犯错,facebook会动态加载它的内容。他们使用History API中的history.pushState更改网址而不重新加载。

我认为您无法使用tabs.onUpdated获取所需信息,因为状态“完成”#39}。从它的角度来看,实际上是正确的。您可能需要在内容脚本中处理此问题。