【问题标题】:Programmatic method to let the user modify the manifest.json content of a Chrome extension让用户修改 Chrome 扩展的 manifest.json 内容的编程方法
【发布时间】:2019-11-20 10:18:47
【问题描述】:

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

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

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

【问题讨论】:

  • 我认为这不可能;不是 100% 肯定,但似乎不太可能像那样更改源代码。不确定它是否会加快您的申请速度,但您不能将"https://canvas.*/*" 作为您的匹配项吗?
  • @James:Chrome 扩展不能有 matches 这样的值。我确实尝试过并收到一条错误消息,然后在这里发现它是被禁止的:stackoverflow.com/questions/40894136/…
  • 啊,对不起,我想使用 include_globs 并不能加快速度,因为您仍然必须指定匹配所有内容?我有一种感觉,您可能不得不忍受等待或找到解决方法。更新延迟有那么大的影响/您是否真的经常更新?也许您可以从 API 或其他东西获取数据而不是上传更新?
  • @James:我也使用include_globs。当尘埃落定并且扩展更加成熟时,这种延迟可能不会成为问题,因为不需要经常更新。但我也对目前的解决方案缺乏优雅感到有点恼火:)

标签: javascript google-chrome-extension manifest.json canvas-lms


【解决方案1】:

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

解决方案:

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

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

    这需要您切换到optional permissions(您将在您的 UI 中显示一个按钮/命令以授予 URL 权限),这将帮助您缩短网上商店的审核时间。

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

【讨论】:

  • OK.. 让我们看看这里。在 alt 2 中,我应该在 background.js 脚本中输入程序注入代码。但是这个脚本是为了响应从...发送的消息……一些请求可选权限的脚本,我们称之为request.js。由于我现在已经删除了整个 content_scripts 部分,如何在清单中声明这个 request.js 脚本以使其被扩展识别?
  • 您将在 UI 中显示一个按钮/命令以授予 URL 或 API 权限。
  • 对不起,我很厚。我的用户界面在哪里?我们在谈论选项页面吗?如果没有,我如何/在哪里创建 UI?
  • 它可以是选项页面或 browser_action 页面或只是图标上的上下文菜单,请参阅overview。
  • 我曾尝试实施此解决方案,但遇到了一些问题,在单独的后续帖子stackoverflow.com/questions/59039717/… 中有详细说明。
猜你喜欢
  • 2022-11-09
  • 1970-01-01
  • 2016-07-11
  • 1970-01-01
  • 2012-01-28
  • 1970-01-01
  • 1970-01-01
  • 2016-03-31
  • 1970-01-01
相关资源
最近更新 更多