如何使 Webextension content_scripts 在第一个页面之后加载到打开的页面上?

问题描述 投票:0回答:1

问题:WebExtension 的

content_scripts
中指定的
manifest.json
仅适用于扩展创建的窗口中加载的第一页,无论我的
matches
多么不具体。

详细信息:我正在为书签网站制作扩展。 该插件会打开一个带有

/bookmarks/new
表单的窗口。此时已注入内容脚本。然后用户填写并提交表单。 如果表单成功提交,它会重定向到

/bookmarks/success

内容脚本不会注入此处,即使我的其中一个匹配项是

"*://*/*"
问题:

是否可以仅使用
    content_scripts
  1. 中的指令将
    manifest.json
    注入到后续页面加载中?
    如果没有,我可以在扩展程序中添加一个侦听器来告诉我有关页面更改及其网址的信息吗?
  2. 我目前正在 Firefox 中进行测试,但我希望能让这个扩展在 Firefox 和 Chrome 中运行。

我未能找到这两个问题的答案。

javascript google-chrome-extension firefox-addon-webextensions web-extension
1个回答
0
投票
@woxxom

的评论为我指明了正确的方向,但最终的解决方案是复杂且不明显的。 备注:

您需要通过
    content_script
  • s 将突变观察者注入到页面中。
    它的变量将在页面加载时被丢弃,因此它们对于比较新旧网址毫无用处
  • 出于我不明白的原因,您不能将突变观察器粘贴到您的
  • background
  • 脚本中。它就是行不通。 [编辑这篇文章你可以解释一下]
    如果您需要的页面不是第一页,那么您无法测试它是否位于内容脚本中的正确网址上
使用一个很好的通用匹配器来匹配相关网站上的所有页面。特别是如果用户在到达您尝试打开的页面之前可能会被重定向到登录页面。
  1. 有一些可以在后台脚本中处理消息的东西
  2. // 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() } },

	
© www.soinside.com 2019 - 2024. All rights reserved.