检测Web应用程序是否通过Microsoft Store作为PWA运行

时间:2018-03-16 10:14:25

标签: javascript windows-store-apps microsoft-edge progressive-web-apps windows-store

我向Microsoft Store提交了一份PWA,并在我的提交中获得了以下注释:

  

10.8.5   您的应用或应用元数据包含促销安装或的链接   购买商店外的软件。   您的应用只能通过Microsoft Store推广或分发软件。

原因是我的网络应用程序有一个产品页面,其中包含指向应用程序可用的各种平台的链接。这样,使用浏览器访问我的Web应用程序的用户可以在其平台上将其作为“本机”应用程序安装。

如何通过Microsoft商店检测我的网络应用是否作为PWA运行,以便我可以在没有产品页面的情况下呈现我的应用的剪裁版本?

我的第一个想法是检查navigator.userAgent,但这似乎含糊不清,因为用户代理将是Microsoft Edge,无论应用程序是“本机”运行还是在浏览器中手动访问。

我更喜欢在JavaScript中区分这些用例的解决方案,但我也对完全不同的方法持开放态度。

2 个答案:

答案 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
}