我在本地开发了一个 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"
}
安装和更新步骤:
- 转到
chrome://extensions/
> 开发人员模式 > 加载解压 > 选择本地dist
目录。 - 解压后的扩展出现在带有 app id 的扩展列表中:
blahblahooaejaldnohkhmaedknkfogn
- 选择扩展并单击“更新”
预期结果:
Chrome 查询远程update.xml
文件,查看比最初安装的版本更高的版本,crx
从指定位置下载并安装新文件。
实际结果:
扩展未更新。
注意:我crt
从存储位置下载了 CI/CD 生成的并上传到这里。该在线工具显示的公钥与key
manifest.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?),但“错误未知应用程序”的状态可能会提示正在发生的事情。