使用Chrome网上应用店内联安装(https://developers.google.com/chrome/web-store/docs/inline_installation),可以指定在成功安装扩展程序时执行的chrome.webstore.install()
回调。
通过一些非常繁琐的调试,我了解到在执行回调时不必100%安装扩展 - 可能是后台尚未加载或内容脚本尚未可用。
在我的特定情况下,问题以这种方式出现:
chrome.webstore.install()
绑定到onclick
事件的安装按钮。第3步是问题所在。有时候在内容脚本完全加载之前会注入iFrame,因此不会注入任何脚本(内容脚本只会注入新创建的iFrame中,而不是在安装/启用扩展时已经存在的iFrame)。
我知道有一些可行的解决方法,例如让扩展本身注入iFrame或简单的setTimeout()
,但为了帮助其他人,我认为值得提出问题:
当chrome.webstore.install()
回调无法确保扩展时,我如何确定扩展程序已100%安装?
使用Checking if user has a certain extension installed中描述的着名<img>
加载方法无效(对于那些认为是解决方案的人)。
答案 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确保注入正确的标签页。