Push notification 如何检测是否安装了chrome套装应用程序?
我是一个chrome应用程序的所有者,该应用程序目前是上的托管应用程序。我想添加推送消息到它,所以它必须成为一个打包的应用程序 然而,我不想失去在网站上提示用户安装应用程序的能力,如果他们还没有安装 我想出了很多方法来测试这一点,但没有一种方法令人满意:Push notification 如何检测是否安装了chrome套装应用程序?,push-notification,chrome-web-store,google-chrome-app,Push Notification,Chrome Web Store,Google Chrome App,我是一个chrome应用程序的所有者,该应用程序目前是上的托管应用程序。我想添加推送消息到它,所以它必须成为一个打包的应用程序 然而,我不想失去在网站上提示用户安装应用程序的能力,如果他们还没有安装 我想出了很多方法来测试这一点,但没有一种方法令人满意: chrome.app.isInstalled,我当前使用的方法不适用于打包的应用程序 插入DOM元素是推荐的做法,但仅适用于扩展内容\脚本 设置cookie可以工作,但打包应用程序不允许使用cookies权限 使用webview设置cooki
,我当前使用的方法不适用于打包的应用程序chrome.app.isInstalled
- 插入DOM元素是推荐的做法,但仅适用于扩展<打包应用程序不允许使用代码>内容\脚本
- 设置cookie可以工作,但打包应用程序不允许使用
权限cookies
- 使用webview设置cookie是可能的,但是webview是沙盒的,并且不与chrome共享cookie
- 检测应用程序中的文件可能有效,但打包应用程序不允许使用
权限web\u accessible\u resources
- 指定
看起来可能有效,但看起来它们只适用于地址栏中的url(即,它们似乎不处理请求)url处理程序
- 设置“外部可连接”是可行的,但它需要一个权限对话框,说明应用程序希望“与合作网站通信”。即使我指定,许可也是如此模糊。我希望避免这种情况,因为当权限发生变化时,人们往往不会更新应用程序李>
url\u处理程序
确实提供了一种无需额外权限的解决方案:
http://example.com/landing/
->http://example.com/landing/?noapp
history.replaceState(null,null,“/landing/”)
将URL更改回原始URLsetTimeout
检查页面是否已卸载如果前面的方法由于某种原因不适合您,那么还有一种(脆弱的)替代方法:在服务器上设置API端点并使用。因为您的应用程序没有访问此资源的权限,所以AJAX请求会自动获取一个不可伪造的请求头(
Origin:chrome)-extension://.../...
)。您可以检测此标头的存在,并将应用标记为针对特定IP地址安装。如果选择正确的频率,您将拥有最新的ip到应用程序映射。但这不适用于NAT后面的多台计算机。如果你一直在家里ping,我(作为一个用户)会担心我的隐私…我还没有机会验证这一点,但看起来这是正确的。当我尝试这个时,我会向你汇报。