77

私はアプリを持っており、ユーザーがどこからナビゲートしているかに基づいて、ユーザーを別のページにリダイレクトしたいと考えています。

Web クリップから移動する場合は、リダイレクトしないでください。モバイル Safari からナビゲートする場合は、safari.aspx にリダイレクトします。他の場所から移動する場合は、available.aspx にリダイレクトします。

iPhone WebAppsを使用できましたが、どのようにロードされたかを検出する方法はありますか? ホーム画面 vs Safari? ユーザーが Web クリップから移動したかどうかを判断するために使用しましたが、ユーザーが iPhone または iPod のモバイル Safari から移動したかどうかを判断するのに苦労しています。

ここに私が持っているものがあります:

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";
}
4

13 に答える 13

35

更新:これは非常に古い回答であり、回答が受け入れられているため削除できません。より良い解決策については、以下の無意識の回答を確認してください。


ユーザー エージェント文字列の「iPad」または「iPhone」部分文字列を確認できるはずです。

var userAgent = window.navigator.userAgent;

if (userAgent.match(/iPad/i) || userAgent.match(/iPhone/i)) {
   // iPad or iPhone
}
else {
   // Anything else
}
于 2010-06-09T15:55:36.610 に答える
28

ベストプラクティスは次のとおりです。

function isMobileSafari() {
    return navigator.userAgent.match(/(iPod|iPhone|iPad)/) && navigator.userAgent.match(/AppleWebKit/)
}
于 2011-02-08T13:23:43.840 に答える
8

落下するコードはモバイル サファリのみを検出し、他には何も検出しません (イルカやその他の小さなブラウザを除く)

  (/(iPad|iPhone|iPod)/gi).test(userAgent) &&
  !(/CriOS/).test(userAgent) &&
  !(/FxiOS/).test(userAgent) &&
  !(/OPiOS/).test(userAgent) &&
  !(/mercury/).test(userAgent)
于 2015-12-17T15:01:08.253 に答える
5

すべての回答を見て、提案された RegExes に関するいくつかのヒントを以下に示します。

  • AppleWebKitデスクトップ Safari にも一致します (モバイルだけでなく)
  • このような単純な正規表現を複数回呼び出す必要はなく.match、より軽い.test方法を好みます。
  • g(グローバル)正規表現フラグは役に立ちませんが、(i大文字と小文字を区別しない)は役に立ちます
  • キャプチャ (括弧) は必要ありません。文字列をテストしているだけです。

モバイルChromeの取得trueは私にとっては問題ないので、これを使用しています(同じ動作):

/iPhone|iPad|iPod/i.test(navigator.userAgent)

(デバイスがiOSアプリのターゲットであるかどうかを検出したいだけです)

于 2016-09-29T14:35:04.173 に答える
1

実際、モバイル サファリを検出するための特効薬はありません。モバイルサファリのユーザーエージェントのキーワードを使用しているブラウザはかなりあります。機能検出を試して、ルールを更新し続けることができるかもしれません。

于 2014-03-11T08:45:10.960 に答える
-1
function isIOS {
  var ua = window.navigator.userAgent;
  return /(iPad|iPhone|iPod).*WebKit/.test(ua) && !/(CriOS|OPiOS)/.test(ua);
}
于 2016-02-06T16:15:40.293 に答える