在 Chrome 中从用户脚本转换时保持相同的 ID

2024-04-15

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

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

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


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

  1. 安装用户脚本。
  2. Visit chrome://extensions/并激活开发者模式。
  3. Scroll down to your user script, and find the ID: Userscript 1.0 Description of user script ID: hjcgfecgldpgebeeflnjldogphkilfdo
    Notice that the version of your userscript is 1.0 (by default, overriden via @version).
  4. 接下来,访问您的 Chrome/Chromium 用户配置文件的扩展程序目录。可以找到默认路径here http://www.chromium.org/user-experience/user-data-directory。如果您使用以下命令启动 Chrome/chromium--user-data-dir=...标记,然后访问....
    进入该目录后,查找 ID 为 3 的目录。
  5. 将整个目录复制到不同的位置,例如/tmp/ or %tmp%.
  6. 使用“加载解压的扩展”按钮,然后选择第一个子目录先前复制的目录的名称:该子目录的名称基于版本。
  7. Scroll down to see that a converted userscript is a true extension (it loads!):
    Userscript 1.0 Description of user script ID: hjcgfecgldpgebeeflnjldogphkilfdo Loaded from: /tmp/hjcgfecgldpgebeeflnjldogphkilfdo/1.0_0

好的,步骤 6-7 是可选的,它们只是为了显示用户脚本被转换为真正的扩展,并设置了特殊的标志。您还可以注意到有关的红色警告清单版本 https://developer.chrome.com/extensions/manifestVersion。要解决这个问题,请编辑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 扩展程序:一些额外的味道 http://wiki.greasespot.net/Cross-browser_userscripting#Google_Chrome。按照官方文档中的步骤更新您的软件包:

更新包 https://developer.chrome.com/extensions/packaging#update

要创建扩展的更新版本:

  1. 增加版本号manifest.json.
  2. 通过访问以下 URL 打开扩展管理页面:chrome://扩展
  3. 点击包扩展按钮。出现一个对话框。
  4. In the 扩展根目录字段,指定扩展文件夹的路径 - 例如,c:\myext.
  5. In the 私钥文件字段,指定已经生成的位置.pem此扩展名的文件 - 例如,c:\myext.pem.
  6. Click OK.

将之前打包的扩展程序上传到 Chrome 网上应用店 https://developer.chrome.com/extensions/packaging#upload

您可以使用 Chrome 开发者仪表板上传扩展程序 你之前已经把自己包装好了。不过,除非你采取特殊措施 步骤,Chrome Web Store 中的扩展程序 ID 将会不同 来自您创建的包中的 ID。这个不同的 ID 可能是 如果您已经分发了扩展包,则会出现问题,因为它 允许用户安装您的扩展的多个版本,每个版本都带有 它自己的本地数据。

如果您想保持扩展 ID 相同,请按照下列步骤操作:

  1. 重命名创建时生成的私钥.crx文件至key.pem.
  2. Put key.pem在您的扩展的顶级目录中。
  3. 将该目录压缩为 ZIP 文件。
  4. 使用以下命令上传 ZIP 文件Chrome 开发者仪表板 https://chrome.google.com/webstore/developer/dashboard.

附录:在未打包/打包的扩展中保留相同的 ID。

分机的extensionID可以通过以下方式控制"key"清单文件中的参数 https://developer.chrome.com/extensions/manifest/key。文档中还说明了使解压和打包扩展具有相同 ID 的最简单方法:

key 该值可用于控制开发期间加载的扩展、应用程序或主题的唯一 ID。

注意:您通常不需要使用该值。相反,写下你的 代码,以便通过使用键值并不重要相对路径 http://developer.chrome.com/extensions/overview.html#relative-urlschrome.extension.getURL() http://developer.chrome.com/extensions/extension.html#method-getURL.

要获取合适的键值,请首先从 .crx 安装您的扩展 文件(您可能需要上传您的扩展程序 https://chrome.google.com/webstore/developer/dashboard or 手动打包 http://developer.chrome.com/extensions/packaging.html)。 然后,在你的用户数据目录 http://www.chromium.org/user-experience/user-data-directory,查看文件Default/Extensions/<extensionId>/<versionString>/manifest.json。你 将看到那里填写的键值。

当。。。的时候key字段不存在,它是随机生成的。然后,根据该密钥生成extensionID。生成extensionID的算法是在这里解释 https://stackoverflow.com/questions/1882981/google-chrome-alphanumeric-hashes-to-identify-extensions。根据算法的本质,您不能以相反的顺序执行它(extensionID ->key).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Chrome 中从用户脚本转换时保持相同的 ID 的相关文章

随机推荐

  • 导入 CSV,用 ; 分隔而不是 PowerShell

    我正在使用 CSV 来存储一些我想在 Powershell 中使用的信息 为了使 CSV 更 可读 我决定将每条信息放入单独的字段中 如果我使用import csv在powershell中 返回是这样的 Test1 Test2 Test3
  • Cakephp Auth: $this->Auth->login错误消息

    我正在使用身份验证组件 我在 beforeFilter 中设置 this gt Auth gt loginError 但我还有另一种可能性 如果用户输入的用户名和密码正确 但 User status pending 我怎样才能显示不同的消息
  • 如何限制 UITabBarController 上的选项卡数量?

    我有一个带有 UITabBarController 的 iPhone 应用程序 一切都很好 该应用程序的选项卡数量超出了显示屏纵向宽度所能显示的选项卡数量 因此我们总共看到 5 个选项卡 最后一个是 更多 选项卡 问题是 我们希望将一些 不
  • Android点击通知未打开附加的Activity

    我想在单击状态栏上的通知时打开一个活动 我在 StackOverflow 上看到过这个答案 但这些答案都不适合我 此问题仅出现在 Lollipop 设备上 最好的重现方法是 1 启动应用程序 2 后台应用程序 3 接收推送通知 4 单击通知
  • Jinja 对可变内容进行嵌套渲染

    假设我在变量 X 中有实际的 jinja 模板代码 假设 X 的内容是 some other variable 如何在渲染 X 内容的同时显示 X 例如 这不起作用 X 因为它只是将其渲染到屏幕 some other variable 而不
  • Android 软键盘遮挡 ScrollView 中的 EditText

    我有一个 TableLayout 它在 ScrollView 内填充 parent 一切都很完美 除了当显示软键盘时它遮盖了最后几个 EditText 从技术上讲 屏幕无法再向下滚动 因为如果不显示键盘 屏幕就会容纳所有内容 只是当键盘显示
  • 获取多选列表框的选定值

    我有一个多选模式的列表框 它与数据库中的 15 个值绑定数据 我有以下代码来显示列表框中选定的每个项目的选定值 foreach var list in list box SelectedItems MessageBox Show list
  • 这里不允许使用 oracle 列

    我收到这个错误 Error report ORA 00984 column not allowed here ORA 06512 at line 14 00984 00000 column not allowed here 这是代码 我复制
  • 如何最好地使用 ASP.NET MVC 中的 Expires 标头?

    我希望能够为用户通过 GET 请求下载的某些项目设置较长的过期时间 我想说 这对于 10 分钟来说很好 即我想将 Expires 标头设置为 10 分钟 这些请求是通过 AJAX 在页面中显示的 HTML 片段 它们对用户会话很有好处 我不
  • jQuery imgAreaSelect 隐藏/显示?

    我一直在尝试隐藏和展示imgAreaSelect选择框取决于是否选中复选框 我试过了 var ias photo imgAreaSelect instance true ias setOptions show false 但它似乎没有做任何
  • 如何通过指定 Gnuplot 脚本内的所有点来绘制数据而无需单独的文件?

    我的程序生成调用 gnuplot 的 bash 脚本 我不想创建额外的文件来存储数据 有什么方法可以显式调用所有值吗 或者可能让 bash 创建一个临时文件 就像是 plot 1 5 2 10 3 1 就是我正在寻找的 您可以使用内联数据的
  • 如何避免使用全局变量? (python - Flask-socketio 应用程序)

    我试图弄清楚如何不为我的应用程序使用全局变量 但我想不出其他任何东西 实际上 我正在 Flask SocketIO 模块的帮助下编写一个 Web 界面 以便与音乐播放器实时交互 这是我的代码片段 其中包含 play 函数 我想我只需要一个示
  • 在函数装饰器中使用 pytest 夹具

    我想为我的测试函数构建一个有多种用途的装饰器 其中之一是帮助将属性添加到生成的junitxml 我知道有一个fixture https docs pytest org en latest usage html record property
  • 通过 C# 将消息放入 Websphere MQ 的数据长度与手动放入相同消息的数据长度不同

    MQMessage queueMessage new MQMessage queueMessage WriteString strInputMsg queueMessage Format MQC MQFMT STRING MQPutMess
  • 如何优雅地忽略Python函数的一些返回值?

    有时 函数给出一个返回值 您只想丢弃该返回值 而不是将其发送到输出流 处理这个问题的优雅方法是什么 请注意 我们正在讨论一个返回无法更改的内容的函数 def fn return 5 我个人用过null之前 但我正在寻找一种更Pythonic
  • 带有值“变量”的字典

    我希望创建一个这样的字典 Dictionary
  • 如何更改 Android 模拟器正在使用的 RAM 数量?

    在第一次设置时 Android Studio 询问我模拟器将使用多少内存 我输入了800M 但是速度很慢 我需要把它弄大一点 比如 1 5GB 我怎样才能做到这一点 第一次设置后可以编辑吗 我过去生成了 Pixel 2 图像 这些值被锁定以
  • 使用 Fluent NHibernate、Oracle 10g 和 OracleClientConfiguration.Oracle10 映射 clob

    我一直在尝试使用 Fluent NHibernate 1 2 0 712 针对 Oracle 10g 映射 clob 字段 我正在使用 System Data 提供程序 因为它默认可用 并试图避免由于以前的客户端问题而添加对 ODP Net
  • “Hello, World”PHP 页面无法正常工作

    我正在尝试开始使用 PHP 编程 我找到了这个例子 你好世界 https en wikipedia org wiki 22Hello World 22 programPHP 页面 这是代码 但是 不是显示 Hello World 它显示 H
  • 在 Chrome 中从用户脚本转换时保持相同的 ID

    我目前正在将用户脚本更新为 chrome 扩展程序 但由于新 ID 不同 因此不会更新旧扩展程序 而是添加一个新扩展程序 有没有办法将用户脚本转换为 Chrome 扩展程序并保持相同的 ID 由于没有用户脚本的密钥文件 我认为这是可能的 但