1

フルブラウザとjQueryMobileインターフェイスを備えたWebサイトがあり、ユーザーは2つを切り替えることができます。それらの設定はCookieに保存されます。デフォルトでは、サイトは設定Cookieなしで訪問者にフルバージョンを提供しますが、最近のスマートフォンユーザーにとってより良いものにするために、デフォルトをJQMにします。したがって、基本コントローラークラスのコンストラクターに次のコードがあります。

class BaseController
{

    protected $mobile;  // must be 0 or 1, cookies can't handle boolean 'false'

    public function __construct()
    {
        if (isset($_COOKIE['mobile']))
        {
            $this->mobile = $_COOKIE['mobile'];
        }
        else
        {
            $this->mobile = $this->isSmartphoneWithCookies();
            setcookie("mobile", $this->mobile, time() + 7776000, '/', ''); // 90 days
        }
    }

    private function isSmartphoneWithCookies()
    {
        $SMARTPHONE_WITH_COOKIES = "android.+mobile|blackberry|ip(hone|od)|opera m(ob|in)i";

        return preg_match("/$SMARTPHONE_WITH_COOKIES/i", $_SERVER['HTTP_USER_AGENT']) ? 1 : 0;
    }

    // the rest of my controller class....
}

ここで私は正確さよりも速度を好むので、ここで提案されているような低速で最新のルックアップサービスを探していません:シンプルなスマートフォンの検出

訪問者がCookieとJQMをサポートする現在のトップスマートフォン/タブレットブラウザの1つを持っていることを簡単に示します。

誰かが私の$SMARTPHONE_WITH_COOKIESの改善を提案できますか?または、私のユースケースに適合するUA署名のコレクションを教えてください。具体的には、リストにブラックベリーを入れても安全ですか?人気のある対応ブラウザを見落としていますか?

4

4 に答える 4

2

ブラウザーが JQM をサポートしているかどうかを検出する方法については、THISおよびTHISの質問を参照してください。Cookie の確認については、 THISを参照してください。

両方の答えはstackoverflowからのものです:)

于 2012-08-13T18:53:29.360 に答える
2

以下のリストにあるすべてのモバイル ブラウザーが Cookie をサポートしているわけではありませんが、モバイル デバイス用の UA 文字列のリストがあると便利です (このリストはDjango アプリのミニ検出器からのものです): http://minidetector.googlecode.com/svn/trunk/minidetector /search_strings.txt

このリストには Nokia タブレットが含まれていないことに注意してください -理由はこちらをご覧ください

于 2012-08-13T19:00:32.527 に答える
1

設計上、アプリの主要な UI セレクターはユーザーです。それを検出スクリプトに委任したくありません。問題の検出のビットは、巧妙なデフォルトを与えることです。誤検知 (Cookie をサポートしていないスマートフォンなど) により、一部のユーザーがサイトに完全にアクセスできなくなる可能性があるため、これは危険な機能です。したがって、失敗した場合は、標準インターフェイスに向かって失敗する必要があります。

それが価値があるもののために、私は次のことを考えました:

  • Opera Mini には、私の JQM アプリに対する十分な JavaScript サポートがありません。
  • Android で実行されている Opera Mobile は、私が知りたかった主要なカテゴリですが、UA 文字列からすべてを正しく選択できる自信はありません。
  • 「windows phone os 7」を検討しましたが、すぐに時代遅れになると判断しました
  • 対象となる Blackberry ブラウザーのサブセットも単純に検出するにはトリッキーすぎるため、誤検出の危険を冒すよりも、層全体を削除することにしました。

だから、私が残っているのは:

$SMARTPHONE_WITH_COOKIES = "android.+mobile|iphone|ipod";

このように軽くシンプルに保つことの代償は、この問題を 2 年ごとに再考しなければならないことです。また、モバイル バージョンを取得するために追加のクリックを行う必要がある多くのモバイル ユーザーもいるでしょう。

于 2012-08-21T06:50:08.303 に答える