JqueryMobileでネストされたページを使用しています。
このように見えます:
// wrap page
<div data-role="page" id="wrap">
// panel
<div data-role="panel" data-id="popover">
// nested pages
<div data-role="page" id="nested1"></div>
<div data-role="page" id="nested2"></div>
</div>
</div>
トランジションでは、$。mobile.pageContainersを切り替えて、ネストされたページをパネルにロードするのではなく、本文(デフォルトはJQM)にロードします。
$.mobile.changePage( page-to-be-loaded, {
// previous page in panel
fromPage:from,
// update the URL with the nested page hash
changeHash:hashChange,
// target panel
pageContainer: $('div:jqmData(id="popover")')
});
これはすべて期待どおりに機能します=パネル内にネストされたページをロードすると、URLは次のように更新されます。
http://some.com#nested1/2/3...
私の問題は、ラップページを離れて新しいJQMページに完全に移動するときにURLを「クリーンアップ」することです。
この場合、URLは最後のネストされたページでスタックします。JQMに通知する必要がある場合、実際にはまだラップページにいます(どのネストされたページがまだURLにあるかは関係ありません)。
質問: URLを正しい値に更新する方法、またはページパラメータを「工場出荷時のデフォルト」に設定する良い方法を探しています。これにより、JQMはネストされたページでパネル遷移を行ったことを認識しません。
私が試してみました:
// 1. location hash - doesn't work
window.location.hash = ""
// 2. ReplaceState - breaks on non-push-state browsers
// on pageinit store defaults
var $myState = {};
$myState.title = document.title;
$myState.url = location.protocol + '//' + location.host + location.pathname;
page.data("rememberState", $myState )
// before leaving the wrap page
var rem = $('#wrap.ui-page-active').data("rememberState");
if (rem && typeof rem != 'undefined') {
history.replaceState('null',rem.title,rem.url);
}
// 3. Reload the page when hiding the panel - crashes my browser :-)
$.mobile.changePage('#wrap', {
allowSamePageTransition: true,
changeHash:true,
transition:none
});
私はJQMパスからかなり離れているので、ヒントを探しています。ポインタをありがとう!