gpt4 book ai didi

javascript - 如何在同一扩展名的manifest.json文件中为多个内容脚本指定不同的匹配模式

转载 作者:可可西里 更新时间:2023-11-01 02:41:33 25 4
gpt4 key购买 nike

场景如下:

场景 1:我想根据 URL 域将不同的内容脚本注入(inject)不同的页面。

例如:将 cs1.js 内容脚本注入(inject) www.a.com 但注入(inject) cs2.js 内容脚本到 www.b.com。内容脚本 cs1.js 和 cs2.js 都是同一个 chrome 扩展的一部分。那么我如何指定不同的匹配模式(在 manifest.json 文件中定义“content_scripts”时在“匹配”部分下)以便一个脚本是在一个页面中注入(inject),而另一个在另一页中注入(inject)。

场景 2:我怎么能提到,如果在 www.a.com 的子域下,我希望将内容脚本注入(inject)域中的所有页面 except www. b.a.com(所有其他子域都需要注入(inject)内容脚本)。如何为这种情况指定匹配模式。

提前致谢。

最佳答案

在 manifest.json 中指定 content_scripts 有点限制。尽管您可以指定不同的匹配模式,但您只能让它执行一组可能的文件。

要实现您想要的效果,您需要设置一个可以解释页面 URL 的 background_page,并执行您认为合适的内容脚本。

三种不同的方法可能是:

  1. 使用manifest的content_scripts来匹配所有可能的URL,并执行一个简单的内容脚本通过chrome.extension.sendRequest()向后台页面发送消息请求。 .后台页面监听 chrome.extension.onRequest.addListener() 的消息, 接收消息,使用 sender.tab.url 解释选项卡的 URL(或者让选项卡的消息发送 window.location.hostname,可能更容易),然后决定内容通过 chrome.tabs.executeScript() 注入(inject)选项卡的脚本.

    或者

  2. 让您的background_page 监听chrome.tabs.onCreated.addListener()chrome.tabs.onUpdated.addListener()获取选项卡的 URL,然后通过 chrome.tabs.executeScript() 决定将哪些内容脚本注入(inject)选项卡.无需为此在 list 中指定 content_scripts

    或者

  3. 类似于 1,但是让您的 list content_scripts 脚本根据当前 URL 确定要执行的操作(同样可以解释 window.location.hostname) ,然后使用 chrome.extension.sendRequest() 为您的 background_page 说明要执行哪些内容脚本(意味着您的 background_page 不决定 - 原始内容脚本决定)。虽然结果相同。

关于javascript - 如何在同一扩展名的manifest.json文件中为多个内容脚本指定不同的匹配模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5781365/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com