4

次のコード

<a data-rel="dialog" href="/Client/Events?ID=c2a7a58e-bef1-4574-987f-4adfc2c3ecc1">
    <div class="ui-li-aside"> 1 </div>
       <div>
          Alejandra Garcia
       </div>
   </a>

これは私のコンピューターのブラウザーで機能し、Windows Phone ブラウザーでも機能します。ただし、iPhone や iPad ブラウザでは動作しません。リンクがクリックされるように見えますが、ダイアログが表示されません。それは非常に遅れているか、単に機能していません。

ページの応答時間と読み込み時間は非常に速く、通常のデスクトップ ブラウザーでシームレスに動作します。読み込まれる非常に小さなページです。

それを機能させるためのヒントはありますか?

4

2 に答える 2

4

あなたが使用しているURLと、JQMが次のようなリンクの作成方法を理解していないことが関係していると思われます。

/Client/Events/StubCheckIn/innasf?stubID=c807321b-5381-4338-adef-9e676374d85d

ファイルの末尾もハッシュタグもありません。単純な [?para=meter] (https://github.com/jquery/jquery-mobile/issues/4253) リンクと JQM で数回処理することで戦ってきました。日々。

「iPadで何も起こらない」を解決する最も簡単な方法は、それぞれのJQMウィジェットを介してiPadデバッガーとconsole.log-gingを有効にすることです。あなたの場合、ここから始めます(約3582行目):

// click routing - direct to HTTP or Ajax, accordingly
$( document ).bind( "click", function( event ) {
    // your first flag
    console.log("flag 1 - click detected")
    if( !$.mobile.linkBindingEnabled ){
        return;
        }

     var link = findClosestLink( event.target ), $link = $( link ), httpCleanup;

     if ( !link || event.which > 1 || !$link.jqmHijackable().length ) {
        // your second flag
        console.log("flag 2 - not a link?!?)
        return;
        }
      ... 

これをクリックハンドラー全体で実行し、さまざまな理由で関数を終了するすべての return にフラグを立てるようにしてください。

クリック ハンドラーの操作が完了すると (それほど長くはありません)、changePage が起動されることがわかります。それに従って、changePage ハンドラーに進み、フラグを立て続けます。これは、次の行 (#3232) あたりから開始する必要があります。

  // Show a specific page in the page container.
  $.mobile.changePage = function( toPage, options ) {
     console.log("flag x - made it to changepage");
     ...

changepageを最後まで見てから、transitionpages (そうではないと思います) と$.mobile.loadPage (約 #2931、可能性が高い) に進みます。

すべてにフラグを立てたら (loadpage の後に停止してください! :-)、ブラウザと iPad でページをリロードし、iPad とブラウザのどこが失敗するかを確認します。おそらく1時間かかりますが、その後JQMがどのように機能するかをよく理解できます:-)

もう 1 つの理由は、pushstate ハンドラー (約 #3781) である可能性があります。ブラウザが pushstate をサポートしている場合 (デスクトップは可、iOS... 不明、iOS3 は不可)、素敵な URLを作成できるので、自分のページから移動すると:

root.com/client/events/checkin/innasf

ダイアログへ

http://root.com/Client/Events/StubCheckIn/innasf?stubID=96e63aee-1465-4ecd-ad35-123f240d09ff

お使いのブラウザーにはまだページの URL が表示されます。おそらく、changehashを false に設定したためです (これにより URL が保持されます)。URLは次のようにする必要があるため、これは(私が信じている)pushstateハンドラーによって行われます。

 root.com/client/events/checkin/innasf#http://root.com/Client/Events/StubCheckIn/innasf?stubID=96e63aee-1465-4ecd-ad35-123f240d09ff&some-dialog-ending

これは、非プッシュステート デバイス (たとえば、私の iPad ios3.3) が解決しようとする URL であり、ここでも機能しません。

ただし、URL が JQM によって解決されると、クリックまたはページ変更ハンドラーのどこかでリンクが失敗すると思います。

フラグを立てる場合は、ブラウザと iOS の違いがどこにあるのか教えてください。次に、これが修正可能かどうかを確認します。

于 2012-05-03T21:23:07.533 に答える
2

わかりました、iOS Safari のデバッグ コンソールでサイトを確認しました。ダイアログが読み込まれる facebook へのクロスドメイン要求を Safari がブロックしているようです (ここで参照: Unsafe JavaScript attempts to access frame warning in Safari ) - これはデバッグ コンソールが示した警告でした。私の調査によると、Safari は他のブラウザよりもこの点に厳しいようです。

于 2012-05-03T20:21:29.003 に答える