1

jQuery Mobile内で実行されるアプリケーションで使用していますUIWebView。アプリケーションはで書かれMonotouchており、複数のタブがあり、タブの1つはhtml5Webビュー内のコンテンツを表示します。コンテンツがアプリケーションのネイティブセクションに対して一貫したルックアンドフィールを持つことがjQuery Mobileできます。カスタム選択メニュー、つまり属性がに設定されている選択を使用html5する機能を構築しようとしていますが、ここで奇妙な問題が発生しました。私は問題を簡単な例に絞り込みました。コードは次のとおりです。html5jQuery Mobiledata-native-menufalse

<body>
    <div data-role="page" data-theme="b" id="forms">
        <div data-role="content">
             <select id="test" data-native-menu="false">
                 <option value="abc">ABC</option>
                 <option value="def">DEF</option>
                 <option value="ghi">GHI</option>
                 <option value="jkl">JKL</option>
                 <option value="mno">MNO</option>
                 <option value="pqr">PQR</option>
                 <option value="abc1">ABC</option>
                 <option value="def1">DEF</option>
                 <option value="ghi1">GHI</option>
                 <option value="jkl1">JKL</option>
                 <option value="mno1">MNO</option>
                 <option value="pqr1">PQR</option>
                 <option value="abc2">ABC</option>
                 <option value="def2">DEF</option>
                 <option value="ghi2">GHI</option>
                 <option value="jkl2">JKL</option>
                 <option value="mno2">MNO</option>
                 <option value="pqr2">PQR</option>
             </select>
        </div> <!--content-->
    </div> <!-- page-->
</body>

このコードを実行するFirefoxSafari、正常に動作します。また、私がそれを実行するとMobile SafariiPadそれもうまくいきます。しかしUIWebView、アプリケーション内でこれを実行すると、選択に少数のアイテムがあり、オーバーレイが表示されている場合にのみ、ポップアップが正しく表示されて閉じます。代わりに、全画面ポップアップが表示されている場合、ポップアップを閉じると問題が発生します。したがって、たとえば、上記で貼り付けたコードでは、が中にあるときに選択がクリックされると、オーバーレイが表示されiPadますportrait mode。しかしiPad、アプリケーションが表示されるように回しlandscape modeて選択をクリックすると、オーバーレイするにはアイテムが多すぎて、代わりに全画面ポップアップが表示されます。次に、このフルスクリーンポップアップを閉じようとすると、次の2つのいずれかが発生します。

  • 1)ページが最初にロードされたとき、ポップアップはまったく閉じません。タッチイベントにはまったく反応しません。

  • 2)Webビューでページのコンテンツを再読み込みして再試行すると、ポップアップを閉じようとするとUIWebView全体が表示されなくなります。このシナリオは、ページの2回目以降のすべてのロードで発生します。

奇妙なことに、アプリケーションをデバッグモードで実行すると、ポップアップからアイテムを選択しようとしたり、 Xをクリックして閉じたりしても、例外がスローされません。Webビューが消えるだけです。Webビューがこのタブの背景画像をカバーしているため、UITabBarControllerあるタブを除くすべてのタブに背景画像が表示されているため、Webビューがなくなったことがわかります。UIWebViewポップアップを閉じようとすると、突然背景画像が空の画面に表示されます...これはWebビューがなくなったことを意味します。

私は本当に自分のコンテンツでカスタム選択メニューを使用できる必要があるhtml5ので、他の誰かが以前にこれに遭遇し、ここで何が起こっているのかを知っていることを望んでいます。それで、誰かがこの奇妙な振る舞いを引き起こしているものを知っているかUIWebView、この問題の回避策を知っていますか?

iPadは実行中のiOSバージョン5.0.1 (9A405)であり、jQuery Mobile私が試したバージョンはとです。この同じ問題は、これらのバージョンの両方で発生します。私または開発のセットアップに関する他の情報が必要な場合はお知らせください。alpha 4.11.1.0jQuery MobileiPad

アップデート:

UIWebViewが消えることについて私が上で言ったことを無視してください。それは実際には起こっていません。実際、Webビューで例外が発生し、アプリケーションパッケージに埋め込まれたエラーhtmlページへのリダイレクトが発生しています。このエラー画面の背景画像はと同じであるUITabBarControllerため、間違った結論にジャンプします。したがって、Webビューでいくつかの例外が発生していることがわかりましたが、それでも非常に多く発生しています。:)もっと知ったらアップデートを投稿します。

アップデート2:

私は今、何が悪いのかを知っていますが、それを解決する方法はまだよくわかりません。これが起こっていることです:ポップアップがクリックされると、URLにjQuery Mobile追加されます。#&ui-state=dialog他のブラウザでは、この変更は閲覧履歴に反映されているため、閲覧履歴に対してback行われることでポップアップが閉じられます。私のUIWebViewの場合、URLへの変更は履歴に反映されていないため、[閉じる]をクリックしても何も起こらない(履歴が空)か、前に戻る前に読み込まれる背景画像のみが表示されるプリロード画面に戻ります。実際のコンテンツが読み込まれます)。

4

1 に答える 1

0

結局、この問題はUIWebviewが原因ではないことがわかりました。コードをwebviewだけに縮小すると、正しく機能することがわかりました。この問題は、私の webview で使用していたために発生しました。これASIHTTPRequest原因で、URL の変更がブラウザーの履歴に反映されませんでした。

この段階でどこ が間違っているのかは見ていませんが、ASIHTTPRequestとにかくこれはこの質問の範囲を超えていると思います. ASIHTTPRequest でこの問題に対処するときは、別の質問を投稿します。

ただし、この問題を回避するにはjQuery Mobile、前のページが履歴に保存されていないという事実を補うためにソースを変更する必要があります。「jQuery Mobile」のバージョン 1.1.1 では、4177行目と6933行目に次のコードがあります。

window.history.back();

これらの行をコメントアウトして、次の行に置き換えます。

$.mobile.changePage( $.mobile.urlHistory.getPrev().url );

これで、「jQuery Mobile」はブラウザの履歴に応答するのではなく、実際に前のURLに移動します。これは、ブラウザの履歴を使用するよりもわずかに遅くなりますが、必要なページが履歴に正しく保存されていない私のような状況では信頼性が高くなります。

于 2012-07-31T09:22:47.540 に答える