1

我在本地开发了一个 Chrome 扩展程序,它是一个 React 应用程序。

我已经设置了一个 CI/CD 管道,以便构建 React 应用程序yarn build以生成dist包含应用程序文件和manifest.json. 然后,管道使用此 npm 包创建文件并将其与已使用新版本号和新文件 URL 更新.crx的文件一起上传到公共存储位置。update.xml.crx

我在本地创建了一个私钥 ( key.pem) 并存储在密钥库中,这样 CI 管道中的“打包”作业每次都使用相同的私钥。公钥已添加到 ,manifest.json以便应用 ID 每次都保持相同。

更新2.xml

<?xml version='1.0' encoding='UTF-8'?>
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
  <app appid='blahblahooaejaldnohkhmaedknkfogn'>
    <updatecheck codebase='https://mypubliccrxstorage.blob.core.windows.net/crx/myapp-1.0.20210702.22.crx' version='1.0.20210702.22' />
  </app>
</gupdate>

清单.json

{
...
    "manifest_version": 2,
    "version": "1.0.20210702.22",
    "key": "<my-public-key",
...
    "update_url": "https://mypubliccrxstorage.blob.core.windows.net/crx/update2.xml"
}

安装和更新步骤:

  1. 转到chrome://extensions/> 开发人员模式 > 加载解压 > 选择本地dist目录。
  2. 解压后的扩展出现在带有 app id 的扩展列表中:blahblahooaejaldnohkhmaedknkfogn
  3. 选择扩展并单击“更新”

预期结果:

Chrome 查询远程update.xml文件,查看比最初安装的版本更高的版本,crx从指定位置下载并安装新文件。

实际结果:

扩展未更新。

注意:我crt从存储位置下载了 CI/CD 生成的并上传到这里。该在线工具显示的公钥与keymanifest.json 中的值匹配,计算出的应用程序 ID 与update.xml.

为了更深入地挖掘,我打开了 Fiddler4 并嗅探了 Chrome 发出的调用。尽管我不明白所有内容,但其中一个回复是:

<?xml version="1.0" encoding="UTF-8"?><gupdate xmlns="http://www.google.com/update2/response" protocol="2.0" server="prod"><daystart elapsed_days="5296" elapsed_seconds="28389"/><app appid="mgndgikekgjfcpckkfioiadnlibdjbkf" status="error-unknownApplication"/><app appid="apbllhlpimnkljppmmdbiipfbjjimjgj" cohort="1::" cohortname="" status="ok"><updatecheck _esbAllowlist="false" status="noupdate"/></app></gupdate>

那个“应用程序 ID”不是我的(或者是 Chrome 应用程序 ID?),但“错误未知应用程序”的状态可能会提示正在发生的事情。

4

2 回答 2

1

Chrome 中的任何保护设置都不允许更新扩展程序。此设置还允许将 .crx 拖放到 chromium 扩展名中。

铬设置

于 2021-07-03T10:26:11.447 回答
0

通过“绑定”安装到文件系统的“加载解压”按钮安装 chrome 扩展,chrome://extensions并且不允许更新。

扩展需要通过.crt文件安装才能更新工作。出于安全原因,Chrome 中已删除了执行此操作的功能。

但是,您可以使用 Chrome 的开发者版本Chromium.crt通过拖放来安装文件。以这种方式安装允许使用原始问题中的方法更新扩展(如果一切配置正确)。

在我的情况下,这种解决方法是可以接受的。

于 2021-07-02T17:31:03.803 回答