我向Microsoft Store提交了一份PWA,并在我的提交中获得了以下注释:
10.8.5 您的应用或应用元数据包含促销安装或的链接 购买商店外的软件。 您的应用只能通过Microsoft Store推广或分发软件。
原因是我的网络应用程序有一个产品页面,其中包含指向应用程序可用的各种平台的链接。这样,使用浏览器访问我的Web应用程序的用户可以在其平台上将其作为“本机”应用程序安装。
如何通过Microsoft商店检测我的网络应用是否作为PWA运行,以便我可以在没有产品页面的情况下呈现我的应用的剪裁版本?
我的第一个想法是检查navigator.userAgent
,但这似乎含糊不清,因为用户代理将是Microsoft Edge,无论应用程序是“本机”运行还是在浏览器中手动访问。
我更喜欢在JavaScript中区分这些用例的解决方案,但我也对完全不同的方法持开放态度。
答案 0 :(得分:1)
我意识到用户代理毕竟不是那么模糊。
Microsoft Edge 通过向其用户代理添加MSAppHost/<WebView Rev>
来确定它作为应用主机运行的时间。
在我的计算机上,我托管的PWA的用户代理列出了“ MSAppHost / 3.0 ”:
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; MSAppHost/3.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 Edge/15.15063
对字符串 navigator.userAgent
进行MSAppHost/
测试会显示网络应用是否作为托管应用运行。
我现在正在使用此检查来进行服务器端和客户端呈现,以剥离链接到外部存储的任何内容。
答案 1 :(得分:1)
正确的官方方法是检查window.Windows
。作为商店应用程序运行时,将注入整个WinRT API表面。因此,您可以(并且应该)执行以下操作,而不是执行用户代理嗅探:
if (window.Windows) {
// running as a Windows app
}
else {
// running in browser
}