いくつかの背景。
デフォルトでは、別の HTML ページへのリンクをクリックすると、JQM はそのページの最初の data-role="page" をロードし、それを最初のページの DOM にアタッチします。JQM はそのページ div のみをロードし、スクリプトはロードしません。そのコンテナの外にあるなど。
「login.html」「menu.html」「account.html」「settings.html」などの5ページのjQueryモバイルアプリがあります。
私はページを次のように変更します。
$.mobile.changepage("account.html")
また、すべてのページ ロード ロジックを最初のページlogin.htmlに次のように配置しました。
<script>
$(document).on('pageinit', '#loginpage', function() {
//do some stuff run some ajax scripts and add some html to its body
});
$(document).on('pageinit', '#accountpage', function() {
//do some stuff run some ajax scripts and add some html to its body
});
$(document).on('pageinit', '#settingspage', function() {
//do some stuff run some ajax scripts and add some html to its body
});
</script>
このアプリはうまく機能しますが、問題は、非常に壊れやすく、予期しないエラーから生き残るのが難しいことです. 例えば;
すべてのページの body html がどのように読み込まれるかはlogin.htmlで定義されているため、これは、ユーザーがこれらのページのいずれかを手動で更新すると、ページはそれらのスクリプトを実行せずに読み込まれ、本文のない空のページが読み込まれることを意味します。その瞬間、正しい DOM がメモリから削除されるため、ユーザーは空のページでいっぱいのアプリで立ち往生します。唯一の方法は、アドレスバーに「login.html」と入力してからすべてのプロセスを開始できるほど賢いことです。スムーズに。
アドレスバーを %100 非表示にすることはできないと思います。下にスクロールすると再び表示されます。
SO これは私が思いついた問題の 1 つです。他にもいくつかの奇妙なことが発生する可能性があります。何らかの方法で DOM が破損した場合、アプリを再度使用する唯一の方法は、login.html アドレス バーを入力することですが、ユーザーはおそらく気にしないでしょう。
DOM の破損を検出したり、ユーザーを更新して login.html に転送したりするなど、このアプリをより堅牢にする方法を教えてください。