oab*_*rca 13 google-chrome google-chrome-extension
为什么chrome.app.isInstalled对于Google Chrome扩展程序总是返回false?
动态地我在页面加载上添加一个链接元素:
<link type="text/css" rel="chrome-webstore-item" href="https://chrome.google.com/webstore/detail/itemID">
Run Code Online (Sandbox Code Playgroud)
以下是单击按钮时执行的一些Javascript:
if (!chrome.app.isInstalled) {
alert('extension is about to be installed!');
install_extension();
}else{
alert('extension is installed already.');
}
Run Code Online (Sandbox Code Playgroud)
我第一次点击按钮时,Google Chrome会问我是否要安装扩展程序.我同意并且扩展程序已正确安装.当我刷新页面时,我再次点击了按钮,Google CHrome要求我再次安装扩展程序,即使我在2分钟前安装它也是如此.换句话说,即使安装了扩展名,chrome.app.isInstalled也始终返回false.为什么?
aps*_*ers 15
请参阅chrome.app.isInstalled始终返回为"false":
chrome.app.isInstalled适用于托管应用程序(定义包含应用程序的一组URL).扩展可以通过将DOM节点注入页面来指示它们已经安装(请参阅https://developers.google.com/chrome/web-store/docs/inline_installation#already-installed的下半部分).
该链接描述了测试您的扩展程序是否已安装的策略:
让内容脚本将DOM节点注入每个页面.该节点应具有非常特定的ID,例如,<div id='my-extension-installed-with-id-sdgdthsdfgdtyjufwknsdkos'>
按下按钮,让页面测试该节点是否存在.
如果节点存在,则内容脚本正在运行; 因此,扩展已安装.如果它不存在,则假定未安装扩展.
注入DOM节点不会影响状态app.isInstalled.相反,您检查是否存在DOM节点作为扩展存在的证据.
另一种解决方案是采用externally_connectable.
由于内联安装是在经过验证的站点上进行的,因此您有一个设置域,您要在该域上检查该扩展名是否存在.让我们说,example.com及其子域名.
然后,您可以在清单中定义以下内容:
"externally_connectable" : {
"matches" : [
"*://*.example.com/*"
]
}
Run Code Online (Sandbox Code Playgroud)
这将暴露chrome.runtime.sendMessage给example.com域.
然后,您可以onMessageExternal在您的扩展中设置一个消息侦听器,它将从页面回复"ping".
有关详细信息,请参阅此答案.
| 归档时间: |
|
| 查看次数: |
6153 次 |
| 最近记录: |