从Chrome中的userscript转换时保持相同的ID

use*_*er3 2 google-chrome userscripts google-chrome-extension

我目前正在将用户脚本更新为Chrome扩展程序,但由于新ID不同,因此不会更新旧扩展程序,而是添加新扩展程序.

有没有办法将用户脚本转换为Chrome扩展程序并保留相同的ID?

由于没有用户脚本的密钥文件,我认为它可能,
但如何?

Rob*_*b W 5

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

  1. 安装用户脚本.
  2. 访问chrome://extensions/并激活开发者模式.
  3. 向下滚动到您的用户脚本,然后找到ID: Userscript 1.0用户脚本ID描述:hjcgfecgldpgebeeflnjldogphkilfdo
    请注意,您的用户脚本的版本是1.0(默认情况下,覆盖通过@version).
  4. 接下来,访问Chrome/Chromium用户个人资料的extensions目录.可以在此处找到默认路径.如果您使用--user-data-dir=...旗帜启动Chrome/chromium ,请访问....
    进入目录后,查找ID为3的目录.
  5. 将整个目录复制到其他位置,例如/tmp/%tmp%.
  6. 使用"加载解压扩展"按钮,然后选择先前复制目录的第一个子目录:该子目录的名称基于版本.
  7. 向下滚动以查看转换后的用户脚本是否为真正的扩展名(它会加载!):
    用户脚本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. 转到此网址,打开Extensions管理页面: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.

可以通过"key"清单文件中参数来控制扩展的extensionID .在解压缩和打包扩展中具有相同ID的最简单方法也在文档中说明:

key在开发期间加载扩展,应用或主题时,此值可用于控制扩展,应用或主题的唯一ID.

注意:您通常不需要使用此值.相反,编写代码,以便通过使用相对路径和 键值无关紧要chrome.extension.getURL().

要获得合适的密钥值,请先从.crx文件安装扩展程序(您可能需要上传扩展程序手动打包).然后,在您的用户数据目录中,查看该文件 Default/Extensions/<extensionId>/<versionString>/manifest.json.您将看到填充的键值.

当该key字段不存在时,它是随机生成的.然后,从该密钥生成extensionID.这里解释了生成extensionID的算法.根据算法的性质,您无法以相反的顺序执行它(extensionID - > key).