【问题标题】:Auto-installing a google chrome extension won't work !自动安装谷歌浏览器扩展不起作用!
【发布时间】:2011-05-04 18:10:31
【问题描述】:

我正在从事与此页面相关的工作

我编写了一个 NSIS 脚本,它试图自动安装一个 chrome 扩展。 (为什么?因为我们的扩展可以通过复选框提供另一个产品安装流程,那么如果用户选择要添加的扩展,它将使用 NSIS 静默安装自动安装在用户 chrome 浏览器上)

我尝试了很多场景,我需要帮助,在谷歌网站上,他们说你可以做到这一点

  • 使用首选项 JSON 文件
  • 使用 Windows 注册表

他们还说“使用首选项文件”有一个错误(Windows 注意:在修复错误 41902 之前,您可能希望使用 Windows 注册表而不是首选项文件。)

提醒: 自动安装的扩展称为外部扩展

  • 所以我尝试了“使用 Windows 注册表”

通过注册表添加谷歌浏览器扩展:

  • 添加此键:“HKEY_LOCAL_MACHINE\SOFTWARE\Google\Chrome\Extensions(我的扩展 id)”
  • 将“路径”与 .crx 的路径一起添加
  • 在扩展版本中添加“版本”

这是我尝试过的(使用 NSIS 脚本):

  • 如果我添加注册表项 它将安装扩展程序,但如果用户手动卸载,chrome 会打开黑名单标志,并且无法使用任何其他脚本重新安装扩展程序。剩下的唯一方法是用户手动安装。最糟糕的是,如果用户手动安装和手动卸载(它将关闭黑名单标志),并且当 chrome 重新启动时,它将自动重新安装扩展程序(无需任何用户操作),因为注册表项仍然存在。

  • 如果我在启动或关闭浏览器时删除注册表项,通过一种怪异的方式(使用 crx 中的 dll(NPAPI)),chrome 将在浏览器重新启动时自动删除扩展目录。

  • 如果我在用户卸载扩展程序时设法删除了注册表项。我们被列入黑名单,因此在用户通过手动安装和卸载扩展程序关闭黑名单标志之前,自动安装程序将不再工作。

  • 如果我在 "C:\Users\(username)\AppData\Local\Google\Chrome\User Data\Default\Extensions\(extensionID)\(version) 中创建目录_0\(我的文件在这里)",我遇到了很多麻烦,因为chrome一重启浏览器就会删除我的文件。

有没有人遇到过这个问题,需要做什么。 我将尝试使用 JSON 文件,但在错误未修复之前,注册表是唯一的方法。

感谢任何有时间阅读所有内容的人! 任何帮助将不胜感激,谢谢!

【问题讨论】:

  • 我刚刚尝试使用 JSON 文件,它的行为与注册表完全相同。行为完全相同。它只是“外部扩展”的不同来源。

标签: installation registry google-chrome-extension external nsis


【解决方案1】:

[2013-11-11]
[这个问题的答案即将过时,所以这里有一个更新的答案。]


根据 Chromium 博客上的 recent post 所说,在不久的将来自动安装 Chrome 扩展程序将不再是一种选择:

从 [2014 年 1 月] 开始,在 Windows 稳定版和 Beta 版渠道中,我们将要求所有扩展程序都必须在 Chrome 网上应用店中托管

作为替代方案,开发人员和供应商将能够使用内联安装功能:

如果您的扩展程序当前托管在 Chrome 网上应用店之外,您应该尽快迁移它们。不会对您的用户产生任何影响,他们仍然可以使用您的扩展程序,就好像没有任何改变一样。如果您愿意,您可以将扩展隐藏在 Web Store 列表中。如果您在自己的网站上有专门的安装流程,则可以利用现有的内联安装功能。


所以,基本上,你需要做的是:

  1. 在 Chrome 网上应用店中托管您的扩展程序(可选择将其从列表中隐藏)。
  2. 让您的安装程序打开指向您网站上的网页的 Chrome 浏览器窗口。
  3. 该页面上包含用户启动扩展安装过程所需的所有信息和数据。 (这里的关键概念是用户必须启动安装过程,例如通过点击按钮。

内联安装是如何工作的:

您希望从中进行内联安装的站点上的 HTML 页面必须在引用用户可以安装的项目的部分中包含一个或多个标记。每个标签必须具有以下格式:

<link rel="chrome-webstore-item" href="https://chrome.google.com/webstore/detail/itemID">

要真正开始内联安装,必须调用 chrome.webstore.install(url, successCallback, failureCallback) 函数。 只能在响应用户手势时调用此函数,例如在点击事件处理程序中;如果不是就会抛出异常。

(强调我的)

有关inline installs feature的更多信息。

【讨论】:

    【解决方案2】:

    有一个更简单的方法...当复选框被点击时,从background page运行这段代码:

    chrome.tabs.create({ url:"FILEPATH.crx" } );
    

    您要安装的预期扩展(.crx 文件)可以托管在网络上,也可以位于您的原始扩展文件夹中...您需要在您的manifest 中获得tabs 权限

    【讨论】:

    • 但是他一开始就不能安装任何扩展?
    【解决方案3】:

    “Windows 应用程序开发人员应要求用户从 Chrome 中安装 Chrome 扩展程序。允许用户安装与您的 Windows 应用程序相关的 Chrome 扩展程序的一个好方法是将用户链接到您的网站并使用inline installation。”

    另见完整版blog post

    【讨论】:

    • 我注意到博客文章的链接存在问题 - 已修复。这应该可以解释一切。
    猜你喜欢
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-12
    • 1970-01-01
    相关资源
    最近更新 更多