28

私はiPhoneWebアプリを持っていますが、アプリが次のいずれかからロードされたかどうかを検出することに興味があります。

  1. iPhone Safari
  2. iPhoneは、サファリバーなしでロードするWebアプリを(ホーム画面に追加して)インストールしました。

何か案は?

4

8 に答える 8

68

window.navigator.standalone の読み取り専用の Boolean JavaScript プロパティを使用して、Web ページがフルスクリーン モードで表示されるかどうかを判断できます。https://developer.apple.com/library/content/documentation/AppleApplications/Reference/SafariHTMLRef/Articles/MetaTags.html

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

}
于 2010-04-29T17:20:56.050 に答える
11

上記のように 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.');
}
?>

楽しみ!

于 2011-02-03T11:56:09.383 に答える
4

これは私が使用するものであり、うまく機能します:

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';
};
于 2011-11-30T11:40:38.743 に答える
2

PHPでそれを行い、誤検知をフィルタリングする方法

PHPを使いたいのであれば、 @strat の答えは正しい方向にあると思います。ただし、モバイル アプリ対応のメタが設定されていないと機能しません。それ以外の場合、iPhone はモバイル サファリを開くブックマークをホームに配置します。また、Facebook ブラウザーなど、iPhone の他のブラウザーからページにアクセスした場合などに、誤検知が返されました。

幸いなことに、スタンドアロンのユーザー エージェント文字列には特殊性があります。スラッシュが 3 つしかありません。私は他のさまざまなブラウザーをテストしましたが、それらはすべて 3 つ以上です。これはハックですが、これを有利に使用できます。また、アプリの標準的な Web ビューには 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>
于 2013-12-24T09:09:26.130 に答える
1

この動作がどこまでさかのぼるかはわかりませんが、iOS は、ページが webapp または safari ブラウザーによって要求されているかどうかを検出するために使用できるさまざまな UserAgent 文字列をサーバーに提示します。

サファリブラウザ

Mozilla/5.0 (iPhone; Mac OS X のような CPU iPhone OS 8_1_1) AppleWebKit/600.1.4 (Gecko のような KHTML) バージョン/8.0 Mobile/12B436 Safari/600.1.4

ホーム画面ボタン/ウェブアプリ

Mozilla/5.0 (iPhone; Mac OS X のような CPU iPhone OS 8_1_1) AppleWebKit/600.1.4 (Gecko のような KHTML) Mobile/12B436

UserAgent に「Safari」が含まれていないことに注意してください。この動作が少なくとも iOS 7 にまでさかのぼることを確認しましたが、さらに先のことを想像します。

そのため、UserAgent 文字列の存在iPhoneまたは存在をテストし、ホーム画面から開かれたことを検出することができます。iPadSafari

于 2014-12-05T06:55:28.790 に答える
0

フルスクリーンかウェブアプリかを判断するには、このワンライナーを好みます。

var webApp = (typeof window.navigator.standalone != 'undefined' && window.navigator.standalone ? true : false);
于 2014-03-19T12:27:54.957 に答える
-1

に簡略化できます var webApp = window.navigator.standalone || false;

に再び簡略化できます var webApp = window.navigator.standalone;

于 2015-09-15T14:42:50.113 に答える
-1

iPhone Safari と WebApp からサイトにアクセスするときの HTTP ヘッダーを確認して、それらが異なるかどうかを確認します。

あるかどうかはわかりませんが、もしそうなら、あなたのウェブサイトのどこかにそれを実装できると確信しています.

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

于 2010-04-29T17:18:43.843 に答える