是否可以在内容脚本中使用 onHistoryStateUpdated 事件?
Is it possible to use onHistoryStateUpdated event in content script?
我正在开发一个 Firefox 插件,它需要观察选项卡 url 通过 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 脚本或不能用于内容脚本。
所以好像答案是'no'或者至少没有人愿意回答。我决定在带有消息传递的后台脚本中使用此 API,以便内容脚本了解检测到的更改。
我正在开发一个 Firefox 插件,它需要观察选项卡 url 通过 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 脚本或不能用于内容脚本。
所以好像答案是'no'或者至少没有人愿意回答。我决定在带有消息传递的后台脚本中使用此 API,以便内容脚本了解检测到的更改。