使用 Chrome 网上应用店内联安装 ( https://developers.google.com/chrome/web-store/docs/inline_installation ) 可以为 chrome.webstore.install()
指定回调将在成功安装扩展时执行。
通过一些非常繁琐的调试,我了解到当执行回调时,扩展不一定 100% 安装 - 可能后台尚未加载或内容脚本尚不可用。
在我的特殊情况下,问题以这种方式出现:
- 用户点击安装按钮
chrome.webstore.install()
绑定(bind)到onclick
事件。 - 成功回调注入(inject) iFrame。
- 为 iFrame 定义内容脚本并注入(inject)以完成一些收尾工作
- 内容脚本返回一个已完成的安装对话框。
第 3 步是问题所在。有时会在内容脚本完全加载之前注入(inject) iFrame,因此不会注入(inject)任何脚本(内容脚本仅注入(inject)新创建的 iFrame,而不是在安装/启用扩展时已经存在的 iFrame)。
我知道有可能的解决方法,例如让扩展本身注入(inject) iFrame 或简单的 setTimeout()
, 但为了帮助他人,我认为值得问这个问题:
当 chrome.webstore.install()
时,我如何确定扩展已 100% 安装?回调不能保证吗?
使用著名的 <img>
Checking if user has a certain extension installed中描述的加载方法不能可靠地工作(对于那些认为这是解决方案的人)。
最佳答案
这是实现它的方法:
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?
关于javascript - 如何检查 Chrome 扩展程序是否已完全安装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12051366/