如何检查Chrome扩展程序是否已完全安装

时间:2012-08-21 08:55:45

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

使用Chrome网上应用店内联安装(https://developers.google.com/chrome/web-store/docs/inline_installation),可以指定在成功安装扩展程序时执行的chrome.webstore.install()回调。

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

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

  1. 用户点击chrome.webstore.install()绑定到onclick事件的安装按钮。
  2. 成功回调会注入iFrame。
  3. 为iFrame定义内容脚本并注入以执行一些完成工作
  4. 内容脚本将返回完整的安装对话框。
  5. 第3步是问题所在。有时候在内容脚本完全加载之前会注入iFrame,因此不会注入任何脚本(内容脚本只会注入新创建的iFrame中,而不是在安装/启用扩展时已经存在的iFrame)。

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

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

    使用Checking if user has a certain extension installed中描述的着名<img>加载方法无效(对于那些认为是解决方案的人)。

2 个答案:

答案 0 :(得分:8)

这是做到这一点的方法:

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?

答案 1 :(得分:0)

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

否则,您的扩展程序可以使用chrome.tabs.create来注入可以programmatic injection的内容脚本。您可以使用 communicate with your page确保注入正确的标签页。

相关问题