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