る場合はユーザのナビゲーションからモバイルサファリ
-
26-09-2019 - |
質問
私はappていただきたいと思いますようにリダイレクトできるようにユーザーが別のページに基づいて航行す。
場合に航行からのwebクリップなリダイレクト.場合に航行からのモバイルサファリへのリダイレクトサファリがあります。aspx.場合に航行からのどこか他の、あなたにリダイレクトできます。aspx
この利用 iPhone WebAppsがあるので、検出するようになりましたが?ホーム画面vsサファリ? このユーザー航行からのwebクリップがうまくいるかどうかを判断するユーザのナビゲーションからモバイルSafariでiPhoneやiPodです。
こちらは何をしてい:
if (window.navigator.standalone) {
// user navigated from web clip, don't redirect
}
else if (/*logic for mobile Safari*/) {
//user navigated from mobile Safari, redirect to safari page
window.location = "safari.aspx";
}
else {
//user navigated from some other browser, redirect to unavailable page
window.location = "unavailable.aspx";
}
解決
更新:今年の活動はこんな感じで答えできないので削除でに回答が認められています。チェック unwittingの答え下 よりよい解決策です。
対応することができるでしょうかチェックの"iPad"または"iPhone"の部分文字列 ユーザーエージェント 文字列:
var userAgent = window.navigator.userAgent;
if (userAgent.match(/iPad/i) || userAgent.match(/iPhone/i)) {
// iPad or iPhone
}
else {
// Anything else
}
他のヒント
を参照してください。 https://developer.chrome.com/multidevice/user-agent#chrome_for_ios_user_agent の - iOSのとiOS上のSafari Chromeのためのユーザーエージェント文字列が不便似ています:
クロームの
Mozilla/5.0 (iPhone; U; CPU iPhone OS 5_1_1 like Mac OS X; en) AppleWebKit/534.46.0 (KHTML, like Gecko) CriOS/19.0.1084.60 Mobile/9B206 Safari/7534.48.3
サファリの
Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543 Safari/419.3
ここに最善のアプローチのように見えますがiOS用のすべてのチェックの最初にあります「ます:
var ua = window.navigator.userAgent;
var iOS = !!ua.match(/iPad/i) || !!ua.match(/iPhone/i);
var webkit = !!ua.match(/WebKit/i);
var iOSSafari = iOS && webkit && !ua.match(/CriOS/i);
のベストプラクティスはあります:
function isMobileSafari() {
return navigator.userAgent.match(/(iPod|iPhone|iPad)/) && navigator.userAgent.match(/AppleWebKit/)
}
フォーリングコードだけ見つけモバイルSafariと何も(イルカなど小型のブラウザを除く)
(/(iPad|iPhone|iPod)/gi).test(userAgent) &&
!(/CriOS/).test(userAgent) &&
!(/FxiOS/).test(userAgent) &&
!(/OPiOS/).test(userAgent) &&
!(/mercury/).test(userAgent)
すべての答えとコメントを吸収合併。 そして、これは結果である。
function iOSSafari(userAgent)
{
return /iP(ad|od|hone)/i.test(userAgent) && /WebKit/i.test(userAgent) && !(/(CriOS|FxiOS|OPiOS|mercury)/i.test(userAgent));
}
var iOSSafari = /iP(ad|od|hone)/i.test(window.navigator.userAgent) && /WebKit/i.test(window.navigator.userAgent) && !(/(CriOS|FxiOS|OPiOS|mercury)/i.test(window.navigator.userAgent));
見てすべての回答からいくつかのヒントを提案するRegExes:
AppleWebKit
マッチデスクトップサファリもだけでなくモバイル)- 必要なコ
.match
以上が一のためのシンプルなregexesり、軽量化.test
方法。 - の
g
(グローバル)正規表現フラグが無駄にi
(大文字と小文字を区別しません)できる有 - 不要捕捉(括弧)までのテスト文字列
私は使って true
モバイルクロムは?同行動):
/iPhone|iPad|iPod/i.test(navigator.userAgent)
(さんを検出する装置の対象となるiOSアプリ)
実際には、モバイルサファリを検出するための特効薬はありません。モバイルサファリのユーザエージェントのキーワードを使用してかなりの数のブラウザがあります。たぶん、あなたは、特徴検出を試してみて、ルールを更新し続けることができます。
私は、の答えを@unwitting upvoted。 iOSのWebViewの中で私のSPAをレンダリングするときしかし、私はそれを少し微調整する必要がありました。
function is_iOS () {
/*
Returns whether device agent is iOS Safari
*/
var ua = navigator.userAgent;
var iOS = !!ua.match(/iPad/i) || !!ua.match(/iPhone/i);
var webkitUa = !!ua.match(/WebKit/i);
return typeof webkit !== 'undefined' && iOS && webkit && !ua.match(/CriOS/i);
};
主な違いは、そうSPA&UIViewの間のメッセージ・ハンドラとして使用されるルートwebkit
オブジェクトと衝突防止するように、webkitUa
に、webkit
の名前変更されます。
function isIOS {
var ua = window.navigator.userAgent;
return /(iPad|iPhone|iPod).*WebKit/.test(ua) && !/(CriOS|OPiOS)/.test(ua);
}
私は、これは古いスレッドですけど、私はあなたたちと私の解決策を共有したいと思います。
私が検出するために、必要なときに、デスクトップのSafariからユーザーのナビゲート(私たちは真ん中2017年だし、Appleがinput[type="date"]
YET ...
だから、私は)それのためのフォールバックのカスタム日付ピッカーを作りました。その入力タイプは、モバイルSafariで罰金に動作しますので、しかし、唯一のデスクトップでのサファリに適用されます。だから、私は、デスクトップのSafariを検出するために、この正規表現を作りました。私はすでにそれをテストし、それがオペラ座、クロム、FirefoxやSafariのモバイルと一致していません。
希望、それは君たちのいくつかを助けるかもしれない。
if(userAgent.match(/^(?!.*chrome).(?!.*mobile).(?!.*firefox).(?!.*iPad).(?!.*iPhone).*safari.*$/i)){
$('input[type="date"]').each(function(){
$(this).BitmallDatePicker();
})
}
私はこの答えを探していたと私は私が前にこの出くわした思い出しました。
JavaScriptでのiOS上のSafariを検出するための最も確実な方法は、
でありますif (window.outerWidth === 0) {
// Code for Safari on iOS
}
or
if (window.outerHeight === 0) {
// Code for Safari on iOS
}
何らかの理由でiOSのSafariはwindow.outerHeightプロパティとwindow.outerWidthプロパティの0を返します。
このは、iOSのすべてのバージョンのすべてのiPadやiPhoneのためです。他のすべてのブラウザとデバイスは、このプロパティは正常に動作します。
わからない、彼らはこれを変更しようとするが、今のところ、それがうまく動作するかどうか。