问题:WebExtension 的
content_scripts
中指定的 manifest.json
仅适用于扩展创建的窗口中加载的第一页,无论我的 matches
多么不具体。
详细信息:我正在为书签网站制作扩展。 该插件会打开一个带有
/bookmarks/new
表单的窗口。此时已注入内容脚本。然后用户填写并提交表单。
如果表单成功提交,它会重定向到 /bookmarks/success
内容脚本不会注入此处,即使我的其中一个匹配项是
"*://*/*"
问题:
是否可以仅使用
content_scripts
manifest.json
注入到后续页面加载中?如果没有,我可以在扩展程序中添加一个侦听器来告诉我有关页面更改及其网址的信息吗?我未能找到这两个问题的答案。
的评论为我指明了正确的方向,但最终的解决方案是复杂且不明显的。 备注:
您需要通过
content_script
background
// contents of your content script
// note that it is NOT comparing urls
new MutationObserver(() => {
browser.runtime.sendMessage({event: 'page_loaded', url: location.href})
}).observe(document, {subtree: true, childList: true});
在后台脚本中为此设置监听器
// Set up a listener
browser.runtime.onMessage.addListener(message => {
// App.handleMessage is specific to my plugin
// all that matters is that this is an async function
// that is ready to handle an url
App.handleMessage(message.event, message.url)
})
然后,在实际检查传入的 url 的函数中进行测试,看看您发现的这个页面是否是正确的。
async checkPageLoaded(url) {
if (url.match(/\/bookmarks\/success\?closeable=true/)) {
this.doTheThing()
}
},