0

jQuery Mobile 1.1.0 での非常に紛らわしい動作を説明する、非常に単純な HTML 2 ページのデモがあります。(実際のアプリはもっと​​複雑ですが、問題を「大幅に」単純化することができました。)

ページ 1 は、ページ 2 にジャンプする単一の href で構成されています。ページ 1 に jQuery Mobile 1.1.0 が含まれていない場合は、リンクをクリックするとページ 2 がエラーなしで表示されます。ただし、ページ 1 に jQuery Mobile 1.1.0 が含まれている場合、ページ 1 のリンクをクリックすると、ページ 1 とページ 2 の HTML を組み合わせたページが表示されます。! つまり、ページ 1 は保持され、ページ 2 はそれに「マージ」されます。通常バージョンと縮小バージョンの両方でこれを試しましたが、同じ結果が得られました。2 つのページは HTML ページと同じくらいシンプルなので、以下のサンプルで簡単に再現できます。これはTomcat 5.5で実行されています(そして、それが重要な場合は、Eclipseから管理および起動されています)。2 つの HTML ファイルと 2 つの jQuery Mobile ファイルはすべて、サーバーのドキュメント ルートのフォルダーに配置されます。(以下のブラウザー出力は、Tomcat を介して実行したものですが、Page1.html ファイルから直接ブラウザーを起動してこれを試してみました。サーバーはまったく関与していません。問題は解決しないため、サーバーが関与しなくても再現できます。 .)

以下は、ページ 1 とページ 2 のファイルの内容と、デスクトップ Firefox ブラウザー (Firebug) で表示される HTML を示しています。

*ページ 1 ソース HTML:

<!doctype html>
<html lang="en">
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<!-- Remove jQuery Mobile and Page 2 is displayed properly. -->
<script src="jquery.mobile-1.1.0.min.js" ></script>
</head>
<body >
<a href="Page2.html">Click for Page 2</a>
</body>
</html>

ブラウザ内のページ 1 の HTML の結果:

<html lang="en" class="ui-mobile"><head><base href="http://localhost/MyServer/DemoBadJQM/Page1.html">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script src="jquery.mobile-1.1.0.min.js"></script>
<title></title></head>
<body class="ui-mobile-viewport ui-overlay-c"><div data-role="page" data-url="/MyServer/DemoBadJQM/Page1.html" tabindex="0" class="ui-page ui-body-c ui-page-active" style="min-height: 521px;">
<a href="Page2.html" class="ui-link">Click for Page 2</a>
</div><div class="ui-loader ui-corner-all ui-body-a ui-loader-default"><span class="ui-icon ui-icon-loading"></span><h1>loading</h1></div></body></html>

ページ 2 ソース HTML:

<!doctype html>
<html lang="en">
<head></head>
<body >
This is from PAGE 2 BODY!!!
</body>
</html>

ブラウザに表示されるページ 2 の HTML:

<html lang="en" class="ui-mobile"><head><base href="http://localhost/MyServer/DemoBadJQM/Page2.html">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<!-- Remove jQuery Mobile and Page 2 is displayed properly. -->
<script src="jquery.mobile-1.1.0.js"></script>
<title></title></head>
<body class="ui-mobile-viewport ui-overlay-c ui-mobile-viewport-transitioning viewport-fade"><div data-role="page" data-url="/MyServer/DemoBadJQM/Page1.html" tabindex="0" class="ui-page ui-body-c ui-page-active fade out" style="min-height: 521px; height: 522px;">
<a href="Page2.html" class="ui-link">Click for Page 2</a>
</div><div class="ui-loader ui-corner-all ui-body-a ui-loader-default"><span class="ui-icon ui-icon-loading"></span><h1>loading</h1></div><div data-role="page" data-url="/OpsServer/DemoBadJQM/Page2.html" data-external-page="true" tabindex="0" class="ui-page ui-body-c">
This is from PAGE 2 BODY!!!
</div></body></html>

jQuery Mobile がページ 1 に含まれていることに注意してください。

コンテンツのない「ページ 2」には、ページ 1 のコンテンツが含まれています。

「ページ 2」には、ページ 1 の href と「loading」要素が含まれています。

「Page 2」には、Page 2 HTML ファイルの単純なテキストが最終的に含まれます。

ページ 1 のリンクをクリックした結果のページは、ページ 1 にページ 2 が追加されたように見えます。ページ 1 から jQuery Mobile を削除すると、問題はなくなります。これは純粋に推測ですが、jQuery Mobile は次のページがフェッチされている間に「読み込み中」メッセージを表示し、これを行う行為により、ブラウザーがページ 1 を「破棄」するのを何らかの形で防ぎ、代わりに着信ページ 2 をマージするようです。前のページ 1 と。

ここで何が起こっているのか誰でも説明できますか?

ありがとう。

4

2 に答える 2

1

ページ 1 の href とともに rel="external" を使用すると、この問題が解決します。

于 2012-04-20T20:40:36.853 に答える
0

これは時代遅れかもしれませんが、似たようなものに出くわしました。その理由は、jQuery Mobile がページを取得して DOM にロードし、スライドのようにページ間を遷移するためのようです。あなたの表示可能領域は、ページ間をスライドさせようとさえしないような方法でページを保持するのに十分だったと思います.

私たちの状況は、jQuery Mobile が明示的にロードされたページとロードされていないページがあり、ロードされていないページはどういうわけか Mobile ライブラリの機能を取得していたというものでした。

jQM は、それ自体と他のページをメモリにロードして、ネットワーク リクエストの数を減らし、ページ間を適切に遷移できるようにします。最初のページを読み込んだ後、バックグラウンドで画像とページをプリロードするように指示することもできます。

これは、通常の HTML ページとは少し異なります。できるだけ少ないネットワーク リクエストに対してサイトを最適化することを考えてみてください。

http://jquerymobile.com/demos/1.0b2/docs/pages/page-cache.html#/demos/1.0b2/docs/pages/page-anatomy.html

于 2013-03-01T21:53:14.593 に答える