我正在使用Firefox加载项,它需要观察通过history.pushState进行的制表符URL更新。我目前正在学习整个用于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脚本中使用,也不能在内容脚本中使用。

最佳答案

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

07-24 19:19
查看更多