我想知道是否有基于JavaScript的方法来检测Web体验是否作为PWA(渐进式Web应用程序)运行,还是仅作为带有完整浏览器UI的标准移动网站运行。
已经安装的PWA和没有安装但仍具有服务工作者和/或应用程序缓存注册的PWA之间是否有任何区别?
我想知道是否有基于JavaScript的方法来检测Web体验是否作为PWA(渐进式Web应用程序)运行,还是仅作为带有完整浏览器UI的标准移动网站运行。
已经安装的PWA和没有安装但仍具有服务工作者和/或应用程序缓存注册的PWA之间是否有任何区别?
"start_url": "./?mode=standalone"
然后在您的JavaScript中,您可以检查此查询字符串参数。
Pete LePage撰写了一篇博客文章,介绍如何使用以下代码设置Google Analytics中的自定义维度,该代码使用window.matchMedia
检查显示模式:
let displayMode = 'browser';
const mqStandAlone = '(display-mode: standalone)';
if (navigator.standalone || window.matchMedia(mqStandAlone).matches) {
displayMode = 'standalone';
}
ga('set', 'dimension1', displayMode);
或者您可以使用 JavaScript 进行检查:
if (window.matchMedia('(display-mode: standalone)').matches) {
console.log("This is running as standalone.");
}
window.matchMedia('(display-mode: standalone)').matches
- Kevin Farrugia2019年10月11日更新: 添加了一个额外的开关来检查应用程序是否通过TWA启动 - document.referrer.includes('android-app://')
这适用于所有应用 - TWA、Chrome和Safari:
const isInStandaloneMode = () =>
(window.matchMedia('(display-mode: standalone)').matches) || (window.navigator.standalone) || document.referrer.includes('android-app://');
if (isInStandaloneMode()) {
console.log("webapp is installed")
}
if (window.matchMedia('(display-mode: standalone)').matches) {
console.log("This is running as standalone.");
}
这个答案是正确的,但值得提到的是PWA可以在很多显示模式下运行:
如果您在“全屏”模式下运行PWA,它将返回false
,因此需要进行额外的检查,例如:
function isPwa() {
return ["fullscreen", "standalone", "minimal-ui"].some(
(displayMode) => window.matchMedia('(display-mode: ' + displayMode + ')').matches
);
}
请注意,即使不是安装的PWA应用程序,“window.matchMedia”检查在“浏览器”显示模式下也会返回“true”。function isPwa() {
var displayModes = ["fullscreen", "standalone", "minimal-ui"];
return displayModes.some((displayMode) => window.matchMedia('(display-mode: ' + displayMode + ')').matches);
}
- StPaulis// Check for browser support of service worker
if ('serviceWorker' in navigator)
项目 lighthouse 可以帮助您通过对多种技术进行评估来检测应用程序是否 渐进增强。快来看看吧。
var isPWA = navigator.userAgent.match(/MSAppHost/i);
display-mode: browser
运行,则在视觉上与您的Web浏览器相同。但是,许多PWA使用standalone
、minimal-ui
或fullscreen
,这些模式在视觉上有所不同。 - Alex Walker