2

I'm currently updating a userscript to a chrome extension, but since the new ID is different it won't update the old extension, but add a new one.

Is there a way to convert a userscript into a Chrome extension and keep the same ID?

Since there is no keyfile for userscript I think it could be possible,
but how ?

4

1 回答 1

5

加载用户脚本时,它会转换为 Chrome 扩展程序。按照以下步骤创建和维护具有相同 ID 的扩展:

  1. 安装用户脚本。
  2. 访问chrome://extensions/并激活开发者模式。
  3. 向下滚动到您的用户脚本,找到 ID: Userscript 1.0 说明用户脚本ID:hjcgfecgldpgebeeflnjldogphkilfdo
    请注意,您的用户脚本的版本是 1.0(默认情况下,通过 覆盖@version)。
  4. 接下来,访问 Chrome/Chromium 用户配置文件的扩展目录。默认路径可以在这里找到。如果您使用该--user-data-dir=...标志启动 Chrome/chromium,请访问....
    进入目录后,查找 ID 为 3 的目录。
  5. 将整个目录复制到不同的位置,例如/tmp/%tmp%
  6. 使用“Load unpacked extension”按钮,选择之前复制的目录的第一个子目录:这个子目录的名字是根据版本来的。
  7. 向下滚动以查看转换后的用户脚本是真正的扩展(它会加载!):
    Userscript 1.0 用户脚本描述 ID:hjcgfecgldpgebeeflnjldogphkilfdo 加载自:/tmp/hjcgfecgldpgebeeflnjldogphkilfdo/1.0_0

好的,步骤 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 扩展程序。按照官方文档中的步骤更新您的软件包:

更新包

要创建扩展的更新版本:

  1. 增加版本号manifest.json
  2. 转到此 URL,打开扩展管理页面:chrome://extensions
  3. 单击打包扩展按钮。出现一个对话框。
  4. 扩展根目录字段中,指定扩展文件夹的路径,例如c:\myext.
  5. 私钥文件字段中,指定已.pem为此扩展名生成的文件的位置,例如 c:\myext.pem.
  6. 单击确定

将之前打包的扩展上传到 Chrome 网上应用店

您可以使用 Chrome 开发人员仪表板上传您之前自己打包的扩展程序。但是,除非您采取特殊步骤,否则扩展程序在 Chrome 网上应用店中的 ID 将与您创建的包中的 ID 不同。如果你已经分发了你的扩展包,这个不同的 ID 可能会成为一个问题,因为它允许用户安装你的扩展的多个版本,每个版本都有自己的本地数据。

如果您想保持扩展 ID 相同,请执行以下步骤:

  1. .crx将创建文件时生成的私钥重命名为key.pem.
  2. 放在key.pem扩展程序的顶层目录中。
  3. 将该目录压缩为 ZIP 文件。
  4. 使用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)。

于 2012-08-02T08:25:57.573 回答