2

Jquery Mobile を使用して、既存の ASP.NET mvc3 サイトのモバイル バージョンを構築しています。

これを行う方法は、ページがモバイルによって要求されているかどうかをコントローラーで検出し、モバイルに適した mvc ビューがある場合はそれを提供し、ない場合は標準ビューを提供することです。

私が抱えている問題は、適切なビューを持たないページへのリンクがまだ jquery-mobile によってページに Ajax され、レイアウトが台無しになることです。data-ajax="false" を使用してリンクごとにこの機能を無効にできることは知っていますが、CMS ベースのサイトであるため、各リンクを制御することはできないため、ユーザーを止めるものは何もありません。モバイル ビューを持たないサイト内のページへのリンクから。

私ができることを望んでいたのは、デスクトップバージョンのサイトのベースビューに、ページを ajax でロードしようとしたときに jquery mobile が取得する属性を含めて、それを拒否し、ajax なしでリンクをリロードすることです。これは可能ですか?

4

3 に答える 3

0

ページごとの問題を処理するために、ローカライズされたJSプロパティとViewBagプロパティの組み合わせをレンダリングすることをお勧めします。そうしないと、どこにでも'data-ajax ="false"'を適用する必要があるシナリオになります。きれいじゃない。

「ViewBag.IsMobileDevice」プロパティを設定するためのユーザーエージェント検出である可能性のあるコントローラーコードの他に、次のようなものが役立つ場合があります。

<script type="text/javascript">

    $( document ).bind( "mobileinit", function( event, data ){
        if ((/iphone|ipod|ipad.*os 5/gi).test(navigator.appVersion) && @ViewBag.IsMobileDevice) {
            $.mobile.ajaxEnabled = false;
        }
    });

</script>

例としてiphone/ipad / ipodを使用していますが、要件に応じて、その場所で何でも使用できます。51degrees.mobiを調べて、モバイル検出に関するインスピレーションを得たいと思います。

これがあなたを助けてくれるか、少なくともあなたを正しい方向に向けてくれることを願っています。

于 2012-06-05T03:19:55.973 に答える
0

当分の間、私はこれをしました:

$(document).bind("pageload", function (event, data) {
    if ($("div[data-role=\"content\"]", data.xhr.responseText).length < 1) {
       window.location = data.url;                  
    } 
});

読み込まれたページに jQuery モバイル要素 data-role="content" が含まれていることを確認しています。含まれていない場合は、ブラウザーを適切なページにリダイレクトします。ただし、ロード時にすべてのページの html を解析しているため、理想的ではありません。また、モバイル以外のサイトが jquery mobile に読み込まれ、リダイレクトで再度読み込まれることも意味します (ただし、このサイトではあまり頻繁に行われるべきではありません)。

また、デスクトップ バージョンのサイトのマスター ビューに data-role="page" を含む空の隠し div を追加する必要がありました。それを防ぐ方法を見つけることができませんでした。

于 2012-06-05T05:34:30.433 に答える
0

モバイル ビューを持たない URL には、「.no-mobi-view」などの別のクラスを指定できます。次に、pagecreate イベントの前に、javascript コードを記述して属性データを追加できます。

$( document ).live( "pagebeforecreate", function( event){
    $('.no-mobi-view').attr("data-ajax","false");
});

CMS に依存している可能性がありますが、ブラウザーに送信される前に cms 出力をフィルター処理できる可能性があります。テストできるクラスの代わりにtarget=_blank

于 2012-06-05T05:12:10.233 に答える