【问题标题】:How to check if Chrome extension has fully installed如何检查 Chrome 扩展程序是否已完全安装
【发布时间】:2012-08-21 08:55:44
【问题描述】:

使用 Chrome Web Store 内联安装 (https://developers.google.com/chrome/web-store/docs/inline_installation) 可以为 chrome.webstore.install() 指定一个回调,该回调将在成功安装扩展程序时执行。

通过一些非常繁琐的调试,我了解到在执行回调时不一定 100% 安装扩展 - 可能尚未加载背景或内容脚本尚不可用。

在我的特殊情况下,问题以这种方式出现:

  1. 用户单击安装按钮,chrome.webstore.install() 绑定到 onclick 事件。
  2. 成功回调注入 iFrame。
  3. 为 iFrame 定义内容脚本并注入以完成一些收尾工作
  4. 内容脚本返回一个完整的安装对话框。

第 3 步是问题所在。有时 iFrame 会在内容脚本完全加载之前被注入,因此不会注入任何脚本(内容脚本只会注入到新创建的 iFrame 中,而不是在安装/启用扩展程序时已经存在的 iFrame)。

我知道有可能的解决方法,例如让扩展程序本身注入 iFrame 或简单的setTimeout(),但为了帮助其他人,我认为值得提出这个问题:

chrome.webstore.install() 回调不能确保扩展时,我如何确定扩展已 100% 安装?

使用Checking if user has a certain extension installed 中描述的著名的<img> 加载方法不能可靠地工作(对于那些认为这是一个解决方案的人)。

【问题讨论】:

    标签: javascript google-chrome google-chrome-extension


    【解决方案1】:

    这是这样做的方法:

    http://code.google.com/chrome/extensions/extension.html#global-events

    正如下面最后一个链接中提到的,你应该能够做到:

    var myPort=chrome.extension.connect('yourextensionid_qwerqweroijwefoijwef', some_object_to_send_on_connect);
    

    您还可以在下一个链接中查看检查项目是否已安装部分:

    https://developers.google.com/chrome/web-store/docs/inline_installation

    或者你可以关注这篇文章中的内容:

    Check whether user has a Chrome extension installed

    我还看到了有关后台页面和本地存储的解决方案:

    http://developer.chrome.com/extensions/background_pages.html

    Chrome extension post-install hook/API function: does it exist?

    【讨论】:

    • @Woodgnome 你的问题解决了吗?
    • @PolishPrince 你是什么意思?
    【解决方案2】:

    您确定您的内容脚本的工作需要在用户安装扩展程序的同一页面上完成?如果没有,只需让您的扩展程序调用 chrome.tabs.updatechrome.tabs.create(少数几个不需要选项卡权限的 tabs 方法中的两个)打开一个可以注入您的内容脚本的页面。

    否则,您的扩展程序可以使用programmatic injection 来注入可以 communicate with your page 的内容脚本。您可以使用chrome.tabs.query 来确保您注入到正确的选项卡中。

    【讨论】:

      猜你喜欢
      • 2011-09-11
      • 2012-12-18
      • 2014-11-02
      • 1970-01-01
      • 2015-03-11
      • 2016-10-07
      相关资源
      最近更新 更多