我有一个iPhone Web应用程序,我有兴趣检测该应用程序是否已加载到:

  1. iPhone Safari
  2. iPhone已安装的Web应用程序(通过添加到我的主屏幕),该应用程序无需Safari栏即可加载。

有任何想法吗?

有帮助吗?

解决方案

您可以使用window.navigator.standalone read-lyly boolean javascript属性确定网页是否以全屏模式显示了网页。 https://developer.apple.com/library/content/documentation/appleapplications/reference/safarihtmlref/articles/metatags.html

if (window.navigator.standalone) {
    // fullscreen mode

}

其他提示

您可以如上所述通过JavaScript检测模式 - 也可以使用PHP和用户代理。

<?
if (strpos(strtolower($_SERVER['HTTP_USER_AGENT']),"iphone")) {
   if (strpos(strtolower($_SERVER['HTTP_USER_AGENT']),"safari")) {
      echo('Running in browser on iPhone');
   }else{
      echo('Running as stand alone WebApp on iPhone');
   }
}else{
   echo('Running on device other than iPhone.');
}
?>

享受!

这是我使用的,效果很好:

if (window.navigator.userAgent.indexOf('iPhone') != -1) {
    if (window.navigator.standalone == true) {
        alert("Yes iPhone! Yes Full Screen!");
    } else {
        alert("Not Full Screen!");
    };} else {
        alert("Not iPhone!");
        document.location.href = 'please-open-from-an-iphone.html';
};

如何使用PHP和过滤误报进行操作

我认为,如果您想使用PHP, @Strat的答案是正确的方向。除非设置了具有移动应用程序的元数据,否则它将无法正常工作。否则,iPhone将在家里放置一个书签开放手机野生动物园。另外,它返回了误报,例如,从iPhone上的任何其他浏览器(例如Facebook浏览器)访问页面时。

幸运的是,独立的用户代理字符串具有特殊性:其中只有3个斜线。我测试了其他各种浏览器,它们都有3个以上的3。这是hackish,但是我们可以利用它的优势。另外,有趣的是,应用程序中的标准网络浏览量将有2个斜率。

因此,这是最小工作示例:

<?php
// We need to add the mobile web app capable meta. Status bar is set to black to avoid our text go under the status bar.
?>

<html>
<head>
  <meta name="apple-mobile-web-app-capable" content="yes">
  <meta name="apple-mobile-web-app-status-bar-style" content="black">
</head>
<body>


<?php

$ua = strtolower($_SERVER['HTTP_USER_AGENT']);

if ( strpos($ua,"iphone") || strpos($ua,"ipad") ) {
   if ( strpos($ua,"safari") ) {
      echo('Running in safari on iPhone/iPad');
   } else if ( substr_count($ua, '/') === 3 ) {
      echo('Running as stand alone WebApp on iPhone/iPad');
   } else if ( substr_count($ua, '/') === 2 ) {
      echo('Running in a WebView on a iPhone/iPad app');
   } else {
      echo('Running in another browser on iPhone/iPad');
   }
} else {
   echo('Running on device other than iPhone/iPad.');
}

?>

</body>
</html>

我不确定此行为的发展多远,但是iOS会向服务器提供不同的用户词字符串,该字符串可用于检测WebApp或Safari浏览器是否要求该页面。

Safari浏览器

Mozilla/5.0(iPhone; CPU iPhone OS 8_1_1喜欢Mac OS X)AppleWebkit/600.1.4(Khtml,像Gecko一样)版本/8.0 Mobile/12B436 Safari/600.1.4

主屏幕按钮/网络应用

Mozilla/5.0(iPhone; CPU iPhone OS 8_1_1喜欢Mac OS X)AppleWebkit/600.1.4(Khtml,像Gecko一样)移动/12B436

请注意,它不包括在用户中的“ Safari”。我已经确认这种行为至少可以追溯到iOS 7,但我想进一步。

因此您可以测试存在 iPhone 或者 iPad 在Useragent字符串中,缺乏 Safari 要检测到它是从主屏幕打开的。

我更喜欢这个单线,可以确定它是否是全屏/在Web应用中。

var webApp = (typeof window.navigator.standalone != 'undefined' && window.navigator.standalone ? true : false);

从iPhone Safari和WebApp访问网站时,请检查HTTP负责人,以查看它们是否不同。

我不知道它们是否是,但是如果是,我相信您可以在网站中的某个地方实现它。

http://php.net/manual/en/function.headers-list.php

可以简化 var webApp = window.navigator.standalone || false;

可以再次简化 var webApp = window.navigator.standalone;

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top