8

使用 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. 内容脚本返回完成的安装对话框。

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

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

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

使用检查用户是否安装了某个扩展中描述的著名<img>加载方法不能可靠地工作(对于那些认为这是一个解决方案的人)。

4

2 回答 2

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

或者您可以按照这篇文章中所做的操作:

检查用户是否安装了 Chrome 扩展程序

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

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

Chrome 扩展安装后挂钩/API 功能:它存在吗?

于 2012-12-18T22:43:35.187 回答
0

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

否则,您的扩展程序可以使用编程注入来注入可以与您的页面通信的内容脚本。您可以使用chrome.tabs.query它来确保您正在注入正确的选项卡。

于 2012-12-17T03:33:06.243 回答