1168 字
6 分钟
Chrome插件开发实现自升级

Start#

公司项目使用开发了一款公司内部使用的Chrome浏览器插件. 在没有上架Chrome应用程序商店的情况下,产品希望集成实现插件自升级, 而不需要每次手动安装包.

毕竟上架公共的应用程序商店Google对于插件的权限管控审核,服务条款有着较为严苛的要求, 同时还有巨额的5$ Chrome插件开发者注册费用. 最主要的是项目不希望每次发版受限于谷歌审核导致延迟. 因此研究了一下在不上架谷歌应用商店的情况下实现插件自升级.

Zero#

1. 生成发布用公私钥对#

  • CRX ID: 使用该公私钥打包生成的插件ID
  • Public Key: 公钥, 可以填写在Plasmo项目的.env文件中添加CRX_KEY, 用来Plasmo确保构建生成的插件ID与上面生成的CRX ID一致
  • Private Key: 私钥, 需要保存为key.pem文件, 供给Chrome浏览器打包使用, 确保Chrome打包程序生成的CRX插件ID与上述ID一致.

2. 添加update_url字段#

该字段为一个文件服务器上updates.xml文件地址(当然updates.xml文件可以自定义)

{
"version": "0.1.1",
"author": "wiz.ai",
"name": "Ai copilot extension",
"description": "An extension for AI copilot",
...
"update_url": "http://update.server.com/updates.xml"
}

如果是Plasmo项目, 可以在项目根目录中的package.json文件的manifest字段中添加. 这样Plasmo构建生成的插件将会自动将manifest字段中的参数嵌入到生成的插件文件manifest.json中

{
"name": "ai-copilot-extension",
"displayName": "Ai copilot extension",
"version": "0.1.1",
"description": "An extension for AI copilot",
"author": "wiz.ai",
...
"manifest": {
...
"update_url": "http://update.server.com/updates.xml"
}
}

3. updates.xml文件内容#

<?xml version='1.0' encoding='UTF-8'?>
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
<app appid='ahfibeckkogjoccoiagmigcnnmgieblk'>
<updatecheck codebase='http://update.server.com/v0.1.0/chrome-mv3-prod.crx' version='0.1.0' />
</app>
</gupdate>

需要注意修改的参数

  • Appid: 插件的ID, 使用步骤1生成的CRX ID
  • Codebase: 新版本插件下载用url
  • Version: 新插件的版本 Appid 是Chrome浏览器用以鉴别区分插件的唯一参数, 需确保插件构建生成的ID与updates.xml中的appid, 以及codebase url下载下来文件的插件ID三者一致, 才可以正常更新

4. 构建CRX版本插件#

  1. 首先使用Plasmo构建出标准插件,(使用原生Chrome v3编写的插件可以跳过这一步)
Terminal window
plasmo build
  1. 使用chrome浏览器对生成的插件构建文件进行重打包,生成CRX文件

    • 打开chrome进入插件管理页面, 点击页面右上角启用开发者模式 图片
    • 点击左侧第二个按钮”打包插件(Pack extension)” 图片
    • 在弹出的界面中第一行Extension root diretory选择上一步中Plasmo生成插件文件夹
    • 在第二行页面中的Private key file选择第一步公私钥生成的key.pem私钥文件
    • 点击Pack extension最终生成打包好的插件crx文件, 文件会位于插件文件夹同级目录
  2. 也可以使用命令行构建crx文件

Terminal window
chrome.exe --pack-extension=C:\myext --pack-extension-key=C:\myext.pem

5. 发布到升级用的服务器#

将上面几步中构建生成的CRX插件文件,以及updates.xml上传到准备好的用于自升级的服务器中

6. Windows平台#

到这上一步在linux平台上使用chrome浏览器中的该插件就已经可以实现依托于chrome自己的插件版本升级服务进行升级. 但是对于windows平台较新版本chrome使用该插件的用户,会出现直接安装crx格式文件的插件, 插件无法启用, 且自升级无效的问题.

图片

原因是Google对于Chrome插件加载的限制.

图片

在windows中如果想要使用非chrome应用商店托管的扩展程序, 需要采用Chrome企业版策略来实现加载非Chrome应用商店的扩展程序. 但是也是有一些黑科技方案可以绕过这一限制. 即修改windows注册表强制chrome允许特定ID的插件

  • 使用如下注册表命令, 复制文本保存为.reg文件在windows下运行即可. 注意替换”lkbebcjgcmobigpeffafkodonchffocl”为正确的chrome 插件ID
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome\ExtensionInstallAllowlist]
"1"="lkbebcjgcmobigpeffafkodonchffocl"

当注册表成功修改之后, 重启安装了crx文件的chrome浏览器即可发现插件可以正常启用.当然chrome浏览器本身会多一些提示文字.

  • 想要恢复注册表可以使用如下的代码保存为.reg文件运行
Windows Registry Editor Version 5.00
[-HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome\ExtensionInstallAllowlist]
Chrome插件开发实现自升级
https://konnoyuuki.cc/posts/chrome插件开发实现自升级/
作者
Ciel Chan
发布于
2024-11-14
许可协议
CC BY-NC-SA 4.0

分享文章

生成精美分享图或复制链接,与更多人分享本文。

继续阅读

沿着主题读

基于共同的标签与分类

换条路线

从其他文章中稳定抽取

评论

正在加载评论...

最后更新于 ,距今已过 677

部分内容可能已过时