私はiPhoneWebアプリを持っていますが、アプリが次のいずれかからロードされたかどうかを検出することに興味があります。
- iPhone Safari
- iPhoneは、サファリバーなしでロードするWebアプリを(ホーム画面に追加して)インストールしました。
何か案は?
私はiPhoneWebアプリを持っていますが、アプリが次のいずれかからロードされたかどうかを検出することに興味があります。
何か案は?
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
}
上記のように 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を使いたいのであれば、 @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>
この動作がどこまでさかのぼるかはわかりませんが、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
または存在をテストし、ホーム画面から開かれたことを検出することができます。iPad
Safari
フルスクリーンかウェブアプリかを判断するには、このワンライナーを好みます。
var webApp = (typeof window.navigator.standalone != 'undefined' && window.navigator.standalone ? true : false);
に簡略化できます
var webApp = window.navigator.standalone || false;
に再び簡略化できます
var webApp = window.navigator.standalone;
iPhone Safari と WebApp からサイトにアクセスするときの HTTP ヘッダーを確認して、それらが異なるかどうかを確認します。
あるかどうかはわかりませんが、もしそうなら、あなたのウェブサイトのどこかにそれを実装できると確信しています.