我是Chrome应用的所有者,该应用目前是https://mydomain.com上的托管应用。我想向它添加推送消息,因此它必须成为一个打包的应用程序。
但是,我不想失去提示网站上的用户安装应用程序的能力,如果他们还没有安装它。
我有很多方法来测试这个,但是没有一个看起来令人满意:
chrome.app.isInstalled
,我目前使用的方法不适用于打包的应用。content_scripts
。cookies
权限。web_accessible_resources
权限。url handlers
似乎可能有效,但看起来它们只适用于地址栏中的网址(即它们似乎无法处理请求)。externally_connectable
有效,但需要一个权限对话框,说该应用程序希望“与合作网站进行通信”。即使我指定https://mydomain.com,权限也是如此模糊。我想避免这种情况,因为人们在权限更改时往往不会更新应用。 如果我同时拥有该应用和https://mydomain.com,是否有人知道如何确定我的打包应用是否已安装?
答案 0 :(得分:2)
url_handlers
或externally_connectable
是可行的方法。由于额外的权限警告(在用户批准新权限之前会禁用该应用程序),您可以理解地排除了最后一个选项。
url_handlers
确实提供了解决方案而无需额外的权限:
http://example.com/landing/
- > http://example.com/landing/?noapp
。history.replaceState(null, null, '/landing/');
将网址更改回原始网址。chrome.app.runtime.onLaunched
,并且不会遵循重定向。在您的网站上,使用setTimeout
检查页面是否已卸载。如果之前的方法由于某种原因不适合您,那么还有一个(脆弱的)替代方法:在您的服务器上设置API端点并使用CORS。由于您的应用没有访问此资源的权限,因此AJAX请求会自动获取不可伪造的请求标头(Origin: chrome-extension://.../...
)。您可以检测此标头的存在,并将应用标记为已安装的特定IP地址。如果您选择正确的频率,您将拥有最新的ip-to-app映射
但这并不适用于NAT后面的多台计算机。如果你不断回家,我(作为用户)会担心我的隐私......