如何检测Chrome移动设备上是否独立运行网络应用

mik*_*son 41 javascript mobile android google-chrome mobile-safari

Chrome移动版最近添加了添加到主屏幕的功能,类似于iOS.这很酷但它不支持它以及iOS - 它不支持window.navigator.standalone所以你无法检测你是否作为一个独立的应用程序运行.

参考文献说:

如何检测应用程序是否作为已安装的应用程序运行?

你不能,直接.

注意它说"直接".我的问题是,我们可以间接地做到吗?是否有一些棘手的方法来做出有根据的猜测?

jos*_*mmo 48

这个答案带来了巨大的延迟,但我在这里只是为那些正在努力寻找解决方案的人发布.

最近Google已经实现了CSS条件display-mode: standalone,因此有两种方法可以检测应用程序是否独立运行:

使用CSS:

@media all and (display-mode: standalone) {
    /* Here goes the CSS rules that will only apply if app is running standalone */
}
Run Code Online (Sandbox Code Playgroud)

同时使用CSS和Javascript:

function isRunningStandalone() {
    return (window.matchMedia('(display-mode: standalone)').matches);
}
...
if (isRunningStandalone()) {
    /* This code will be executed if app is running standalone */
}
Run Code Online (Sandbox Code Playgroud)

如果您需要更多信息,Google Developers会有专门针对此主题的页面:https://developers.google.com/web/updates/2015/10/display-mode

  • 对于那些可能难以使其正常工作的人,请记住,manifest.json 应该包含条目“display:standalone”(而不是“display:fullscreen”)/sf/answers/3825709471/ (4认同)
  • Chrome显然支持`display-mode:standalone` [自2014年11月起](https://code.google.com/p/chromium/issues/detail?id=289113#c23)但迟到总比没有好:) (2认同)

Jav*_* R. 18

iOS和Chrome WebApp的行为不同,这就是我接下来的原因:

isInWebAppiOS = (window.navigator.standalone == true);
isInWebAppChrome = (window.matchMedia('(display-mode: standalone)').matches);
Run Code Online (Sandbox Code Playgroud)

与此处相同:检测iOS是否正在使用webapp


mur*_*308 13

对于IOS,我们window.navigator.standalone有财产要检查..

但对于Android上的Chrome,它不支持此属性.检查这个的唯一方法是计算屏幕宽度和高度.

以下是检查以下内容的代码:

navigator.standalone = navigator.standalone || (screen.height-document.documentElement.clientHeight<40)
Run Code Online (Sandbox Code Playgroud)

我从下面的链接中得到了参考:

适用于Android的主屏幕Web应用程序感谢Chrome 31

  • 现在有一种更可靠且符合标准的方法来执行此操作:[`display-mode: standalone`](http://stackoverflow.com/questions/21125337/how-to-detect-if-web-app-running -standalone-on-chrome-mobile/34516083#34516083)。 (2认同)

小智 5

对于 IOS,standalone 和 web 模式的 localstorage 是不同的。使用 android KitKat 和 Chrome,当您在 web 版本的 localstorage 中保存一个值时,您可以在独立模式下检索它。

因此,您只需在用户浏览网页版本时(在添加到主屏幕之前)将 document.documentElement.clientHeight 保存到 localstorage。然后,只需将 document.documentElement.clientHeight 的当前值与 localstorage 值进行比较。如果当前值为 >,则为独立模式。

我在几个设备上尝试过。

  • 现在有一种更可靠且符合标准的方法可以执行此操作:[`display-mode:standalone`](http://stackoverflow.com/questions/21125337/how-to-detect-if-web-app-running -chrome-mobile 上的独立版/34516083#34516083)。 (2认同)

小智 5

一个古老的问题,但今天可用于Chrome Android的解决方案明显更好。

方法之一(最干净的IMO)。您可以使用带有“ start_url”键的Web App Manifest添加该键,该键的值会将查询字符串参数添加到您的常规主页中。

例如:-如果首页网址为https://www.example.com。在Web App清单集中

    "start_url": "https://www.example.com/?user_mode=app"
Run Code Online (Sandbox Code Playgroud)

Google关于网络应用清单的指南:https : //developers.google.com/web/fundamentals/engage-and-retain/web-app-manifest/