我正在尝试使用我的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);
});
答案 0 :(得分:1)
当Chrome documentation用于更改位置栏中的网址时,WebExtensions documentation和history API都明确声明webNavigation.onHistoryStateUpdated
事件被触发。当用户点击 forward 或 back 按钮时,都没有声明事件被触发。
如果您想确定导航是用户点击 forward 或返回的结果,您需要收听webNavigation.onCommitted
MDN 事件。该信息以transitionQualifiers
MDN 数组中包含的值"forward_back"
提供。在这种情况下,transitionType
似乎仍然是浏览器最初导航到该网址的方法。