加载用户脚本时,它会转换为 Chrome 扩展程序。按照以下步骤创建和维护具有相同 ID 的扩展:
- 安装用户脚本。
- 访问
chrome://extensions/
并激活开发者模式。
- 向下滚动到您的用户脚本,找到 ID:
![Userscript 1.0 说明用户脚本ID:hjcgfecgldpgebeeflnjldogphkilfdo](https://i.stack.imgur.com/FpDYw.png)
请注意,您的用户脚本的版本是 1.0(默认情况下,通过 覆盖@version
)。
- 接下来,访问 Chrome/Chromium 用户配置文件的扩展目录。默认路径可以在这里找到。如果您使用该
--user-data-dir=...
标志启动 Chrome/chromium,请访问...
.
进入目录后,查找 ID 为 3 的目录。
- 将整个目录复制到不同的位置,例如
/tmp/
或%tmp%
。
- 使用“Load unpacked extension”按钮,选择之前复制的目录的第一个子目录:这个子目录的名字是根据版本来的。
- 向下滚动以查看转换后的用户脚本是真正的扩展(它会加载!):
![Userscript 1.0 用户脚本描述 ID:hjcgfecgldpgebeeflnjldogphkilfdo 加载自:/tmp/hjcgfecgldpgebeeflnjldogphkilfdo/1.0_0](https://i.stack.imgur.com/Hofld.png)
好的,步骤 6-7 是可选的,它们仅用于显示用户脚本已转换为真正的扩展,并设置了特殊标志。您还可以注意到有关清单版本的红色警告。要解决此问题,请编辑manifest.json
并添加"manifest_version": 2,
. 所以,在我们的例子中:
...
"converted_from_user_script": true,
"description": "Description of user script",
"key": "eYxnPzfSPtfL3ji4nQX3ujTXpzz3YQ6dVlvHWf1gvW8=",
"name": "Userscript",
"version": "1.0",
"manifest_version": 2
}
现在,您拥有了一个 Chrome 扩展程序,它的行为类似于具有一些额外风味的 Chrome 扩展程序。按照官方文档中的步骤更新您的软件包:
要创建扩展的更新版本:
- 增加版本号
manifest.json
。
- 转到此 URL,打开扩展管理页面:chrome://extensions
- 单击打包扩展按钮。出现一个对话框。
- 在扩展根目录字段中,指定扩展文件夹的路径,例如
c:\myext
.
- 在私钥文件字段中,指定已
.pem
为此扩展名生成的文件的位置,例如
c:\myext.pem
.
- 单击确定。
您可以使用 Chrome 开发人员仪表板上传您之前自己打包的扩展程序。但是,除非您采取特殊步骤,否则扩展程序在 Chrome 网上应用店中的 ID 将与您创建的包中的 ID 不同。如果你已经分发了你的扩展包,这个不同的 ID 可能会成为一个问题,因为它允许用户安装你的扩展的多个版本,每个版本都有自己的本地数据。
如果您想保持扩展 ID 相同,请执行以下步骤:
.crx
将创建文件时生成的私钥重命名为key.pem
.
- 放在
key.pem
扩展程序的顶层目录中。
- 将该目录压缩为 ZIP 文件。
- 使用Chrome 开发者仪表板上传 ZIP 文件。
附录:在未打包/打包的扩展中保持相同的 ID。
扩展的 extensionID 可以通过"key"
manifest 文件中的参数来控制。文档中还说明了使解压和打包扩展具有相同 ID 的最简单方法:
key 此值可用于控制开发过程中加载的扩展、应用或主题的唯一 ID。
注意:您通常不需要使用此值。相反,编写您的代码,以便通过使用相对路径和
chrome.extension.getURL()
.
要获得合适的键值,首先从 .crx 文件安装您的扩展程序(您可能需要上传您的扩展程序或手动打包它)。然后,在您的用户数据目录中,查看文件
Default/Extensions/<extensionId>/<versionString>/manifest.json
。您将看到那里填写的键值。
当key
字段不存在时,它是随机生成的。然后,extensionID 是从这个 key 生成的。生成 extensionID 的算法在此处解释。根据算法的性质,您不能以相反的顺序执行它(extensionID -> key
)。