是否可以在内容脚本中使用onHistoryStateUpdated事件?

时间:2018-01-18 09:37:01

标签: javascript firefox-webextensions

我正在开发一个Firefox插件,需要观察通过history.pushState制作的标签网址更新。我目前正在为Firefox浏览整个WebExtension API - 这是我在Greasemonkey用户脚本时代之后的第一个插件。

我已经尝试使用MDN上的API文档中提供的这个稍微编辑过的代码(删除了可选的过滤器参数):

function logOnHistoryStateUpdated(details) {
    console.log("onHistoryStateUpdated: " + details.url);
    console.log("Transition type: " + details.transitionType);
    console.log("Transition qualifiers: " + details.transitionQualifiers);
}

browser.webNavigation.onHistoryStateUpdated.addListener( logOnHistoryStateUpdated );

当在后台脚本中使用时,此代码适用于我,并在浏览器控制台中显示日志消息。我想要的是这个代码在内容脚本中工作,但事实并非如此。简单地说,在任一控制台中都不会打印日志消息。

为了确定发生了什么,我已经添加了以下代码:

console.log( typeof browser );
console.log( typeof browser.webNavigation );
console.log( typeof browser.webNavigation.onHistoryStateUpdated );
console.log( typeof browser.webNavigation.onHistoryStateUpdated.addListener );

印刷值如下:

object
undefined

所以,似乎webNavigation API在内容脚本中不可用,我是对的还是做错了什么?我确实在清单中添加了webNavigation权限(它与我在工作后台脚本中使用的清单文件相同)。我在MDN上看不到任何内容,说这个API只能在bg脚本中使用,或者不能在内容中使用。

1 个答案:

答案 0 :(得分:2)

所以似乎答案是'不'或者至少没有人愿意回答。我决定在后台脚本中使用此API和消息传递,以便内容脚本知道检测到的更改。