【问题标题】:Making a Windows Installer communicate with a Chrome extension without NPAPI使 Windows 安装程序与没有 NPAPI 的 Chrome 扩展程序通信
【发布时间】:2012-03-02 15:13:37
【问题描述】:

我有一个 Windows 应用程序,它通过 Windows 注册表安装 Chrome 扩展程序。我希望这个应用程序能够根据用户在安装过程中输入的信息生成一些一次性信息供 Chrome 读取。

假设我没有在 Chrome 扩展程序中使用 NPAPI,安装程序是否可以在任何地方放置信息以便扩展程序看到它?

编辑:我还希望在安装结束时启动 chrome。

【问题讨论】:

    标签: google-chrome-extension


    【解决方案1】:

    另一种从 Chrome 外部将信息传递给已安装扩展程序的方法是创建一个包含扩展程序的页面,然后您也可以打开 Chrome 并在哈希中传递信息......例如......

    chrome.exe "chrome-extension://emcggffhhapbbkcodabdliakappfibcf/showHash.html#info"
    

    这种方法的问题是您使用简单的注册表方法(我猜)而不是使用策略方法安装扩展。使用 Policy 方法,您可以强制安装,即使 Chrome 已经打开,它也会发生(根据文档,简单的方法会在下次打开 Chrome 时发生)。这样做的缺点是您必须自己制作卸载程序,因为您无法从使用此方法安装的 Chrome 中卸载扩展程序。我也不确定安装扩展程序之前的速度/频率(无法在文档中找到它并且懒得尝试它;))并且你需要让你的安装程序等待它安装...... .
    http://www.chromium.org/developers/how-tos/adding-new-policies
    http://dev.chromium.org/administrators/policy-list-3#ExtensionInstallForcelist
    http://dev.chromium.org/administrators/policy-templates(说明在注册表中添加它们的位置)

    另一种可能的方法是在安装时打包扩展并添加一个包含扩展可以读取的信息的文件。这种方法的问题是扩展 ID 会改变(对你来说可能不是问题?)或者你必须在你的安装程序中包含你可能不想做的 PEM....

    chrome.exe  --pack-extension="C:\simple-example" --no-message-box
    

    【讨论】:

    • 在安装时打包扩展几乎是一个很好的解决方案,但不幸的是,除非我包含 PEM,否则它会破坏自动更新。使用策略方法也很聪明,但如果 Chrome 卸载失败,我的用户会很生气。话虽如此,我可以自己打包一个扩展作为安装过程的一部分,并让该扩展以某种方式与主扩展通信。不理想,但如果没有人能提出更好的建议,我会接受这个作为答案。
    • 是的,我也想到了第二个扩展的想法,但认为它可能有点混乱。如果你这样做了,那么主扩展只能访问你在安装程序中生成的第二个扩展中的一个页面。只需将其加载到 iframe 中,并使用您的信息将消息发布到主扩展/父框架,就像我在这里所做的那样.....*.com/questions/9033873/… ...然后也许用管理清理...code.google.com/chrome/extensions/… ..似乎过度你是吗? ;)
    • 由于规范更改,问题自行消失了,但这可能是我会使用的解决方案。
    【解决方案2】:

    许多人希望在安装扩展程序时触发事件。

    有一种解决方法,而不是优雅的方式从外部向浏览器发送信息:启动 chrome 要求打开一个 url。

    我将它与本地 html 文件一起使用。我的应用程序执行如下命令行:

    "pathToChrome\Chrome.exe" "file://pathToHtmlFile/myFile.html?param1=value1&param2=value2"
    

    我传递的信息是页面的参数。

    问题在于,扩展程序以多种方式之一读取此页面:

    • 您可以编写将触发此页面的内容脚本
    • 你可以在这个页面放一些javascript,把参数写成cookies,供以后扩展读取(此时不调用扩展)

    它不必是本地页面。如果你的页面在服务器上,它可以将参数保存在服务器中,值得。

    它甚至不是你的页面。您可以调用 Internet 上的任何页面,但要确保它会触发您的内容脚本扩展,并且会读取您的“自定义”参数。

    【讨论】:

    • 你有没有机会做一个使用cookies的小例子,因为我对cookies没有任何经验,对这种方法很感兴趣。
    • 这个解决方案肯定会工作,但我不希望我的安装程序启动 Chrome(或者至少,不是以用户可见的方式)。
    【解决方案3】:

    您可以从安装程序创建 WebSQL 并从扩展程序中读取数据,而不是通过 Windows 注册表进行通信。

    您需要对如何做到这一点进行一些研究,但这是可能的。步骤应该是:

    1. 安装程序将创建数据库并注册到 chrome(可能使用 Databases.db)
    2. 该扩展将使用 openDatabase 创建与数据库的连接
    3. 扩展程序将执行事务并读取所需文件。

    另一种选择是将文件添加到 crx,例如“installer_info.json”,然后从扩展名向“installer_info.json”文件发出 AJAX 请求。

    没有正式的方法来做这件事,只要稍微研究一下,你就会有方法。

    【讨论】:

      最近更新 更多