让用户修改 Chrome 扩展的 manifest.json 内容的编程方法

Programmatic method to let the user modify the manifest.json content of a Chrome extension

我正在开发与 Canvas LMS 一起使用的 Chrome 扩展。一个问题是 Canvas 订阅者有不同的 URL,它们没有共同的顶级域。例如,我大学的 Canvas 站点有 URL canvas.gu.se,而另一所学校可能有 canvas.myschool.edu。但是我无法在 manifest.json 文件中输入 "matches":"https://canvas.*/*",因为不允许使用顶级通配符(详见 this post)。相反,我必须输入 "matches":"https://*/*",然后以编程方式(在 content.js 代码中)清除其中没有 "canvas" 的网站。

它以其自身的笨拙方式运作,但 Chrome 网上应用店对此并不满意,这使我的更新延迟了几天。

当然可以使用 narrow/dummy matches 值,然后要求用户自己编辑清单以包含在每种情况下使用的特定 URL,但是如何他们可能会那样做吗?相反,我希望扩展程序启动一个本地页面,提示用户输入特定的 URL,然后相应地编辑该特定机器上的 manifest.json 文件。这可能吗?如果可能,怎么做?

无法修改从网上商店安装的扩展,其内容受 Chrome 保护和验证。只能修改开发者模式下解压的本地扩展。

解决方案:

  1. 添加 "include_globs": ["*://canvas.*/*"] (info) 除了您的 "matches".
    这很可能不会帮助您减少网上商店的审核时间。

  2. 删除 "content_scripts" 部分,以及 "permissions" 中的主机并切换到 programmatic injection in a chrome.tabs.onUpdated (info) 侦听器。

    这需要您切换到 optional permissions(您将在 UI 中显示 button/command 以授予 URL 权限)这将帮助您网店评论次数。

    甚至还有更高级的 declarativeContent API(带有 RequestContentScript 操作,实际上在稳定 Chrome 中受支持)。