从后台页面捕获所有选项卡的HistoryStateUpdated事件

时间:2017-02-28 18:53:21

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

我正在尝试使用我的WebExtensions扩展程序中的webNavigation.onHistoryStateUpdated抓住chrome.tabs

问题是,我只能抓住onHistoryStateUpdated个事件,因为我创建的持久性背景页面可以从所有其他标签中监听onHistoryStateUpdated个事件!

tabs.onUpdated事件在后台页面中运行得非常好,但不是onHistoryStateUpdated - 这对于我必须捕获浏览器后退/前进事件至关重要。

的manifest.json

{
  "manifest_version": 2,

  "browser_action": {
    "default_icon": "icon.png",
    "default_popup": "popup.html"
  },

  "background": {
    "page": "background.html",
    "persistent": true
  },

  "permissions": [
    "tabs",
    "webNavigation"
  ]
}

background.js

// Works not... (i.e. is not fired)
chrome.webNavigation.onHistoryStateUpdated.addListener(function(details) {
    console.log("tabid", tabId);
});


// WORKS!
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {    
    console.log("Tab #" + tabId, " has its URL to: (" + changeInfo.status + ")");
    console.log("\t" + changeInfo.url);
});

1 个答案:

答案 0 :(得分:1)

Chrome documentation用于更改位置栏中的网址时,WebExtensions documentationhistory API都明确声明webNavigation.onHistoryStateUpdated事件被触发。当用户点击 forward back 按钮时,都没有声明事件被触发。

如果您想确定导航是用户点击 forward 返回的结果,您需要收听webNavigation.onCommitted MDN 事件。该信息以transitionQualifiers MDN 数组中包含的值"forward_back"提供。在这种情况下,transitionType似乎仍然是浏览器最初导航到该网址的方法。