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

8
使用 Chrome Web Store 内联安装 (https://developers.google.com/chrome/web-store/docs/inline_installation),可以为chrome.webstore.install()指定一个回调函数,该函数在成功安装扩展时执行。
通过一些非常繁琐的调试,我了解到当回调被执行时,扩展程序并不一定已经完全安装 - 也许后台尚未加载或内容脚本尚不可用。
在我的特定情况下,问题表现如下: 1. 用户单击绑定到onclick事件的chrome.webstore.install()安装按钮。 2. 成功回调注入一个iFrame。 3. 为iFrame定义内容脚本并注入以完成某些工作。 4. 内容脚本返回一个已完成安装的对话框。
步骤3是问题所在。有时iFrame将在内容脚本完全加载之前被注入,因此不会注入任何脚本(内容脚本仅在新创建的iFrame中注入,而不是在扩展程序安装/启用时已存在的iFrame中)。
我知道有可能的解决方法,例如扩展程序本身注入iFrame或使用简单的setTimeout(),但出于帮助他人的目的,我认为值得提出问题: 如何确定扩展程序已经完全安装,当chrome.webstore.install()回调不能确保它时?
使用在 Checking if user has a certain extension installed 中描述的著名的<img>加载方法无法可靠地工作(对于那些认为这是一个解决方案的人来说)。
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函数:是否存在?


@Woodgnome,你的问题解决了吗? - Mehdi Karamosly
@PolishPrince 你是什么意思? - Mehdi Karamosly

0

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

否则,您的扩展程序可以使用编程注入来注入一个内容脚本,该脚本可以与您的页面通信。您可以使用chrome.tabs.query确保您正在向正确的标签页注入。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接