div に新しい html ファイルをロードするメニューがあります。読み込みは、メニューの<a>
タグに添付されたクリック イベントによって行われます。ロードはうまく機能し、ハッシュ タグを使用して新しい href を作成することで、新しいロードを履歴に追加します。
しかし、戻るボタンを使用すると、ブラウザーのアドレス フィールドで URL が正しく更新されますが、ページが読み込まれません。アドレス フィールドにフォーカスして Enter キーを押すと、読み込まれます。
これは、mypage.html ヘッダーにある JavaScript です。
<script type="text/javascript">
$(document).ready(function() {
// replace menu link click
$(".right-menu a").live('click', function(ev) {
ev.preventDefault();
ev.stopPropagation();
window.location.href = $(this).attr('href');
$("#content-right").load('mypage'+window.location.hash.substring(1)+'.html');
return false;
});
// If page loads, load the content area according to the hash.
var hrtag = window.location.hash.substring(1);
if(hrtag=="")
hrtag='about';
$("#content-right").load('mypage'+hrtag+'.html');
window.location.hash = hrtag;
});
</script>
メニューはこちら
<ul class="right-menu">
<li><a href="mypage.html#about">About</a></li>
<li><a href="mypage.html#screens">Screens</a></li>
<li><a href="mypage.html#license">License</a></li>
<li><a href="mypage.html#download">Download</a></li>
<li><a href="mypage.html#donate">Donate</a></li>
</ul>
ページを としてロードするmypage.html
と、javascript はハッシュを追加し#about
、div id"content-right"
をロードしますmypageabout.html
メニューをクリックすると、たとえばdownload、div idがロードさ"content-right"
れますmypagedownload.html
どちらの場合も、ページのハッシュバージョンにwindow.location
設定され、履歴に登録されます。mypage.html#about
mypage.html#download
次の順序でメニューをクリックすると; license、about、画面を開き、ブラウザの戻るボタンをクリックすると、アドレス フィールドが表示されます。mypage.html#about
、mypage.html#license
しかし、それはページをロードしません!?!
URL は明らかに履歴にありますが、読み込まれません。ここで何が間違っているのか手がかりはありますか?
// ありがとう
編集 - 解決策
Andres Gallo の記事のおかげで、私はこの解決策を思いつきました:
<script type="text/javascript">
$(document).ready(function() {
// Make sure the page always load #about
LoadIDWithURL('#content-right','myPageAbout.html');
window.addEventListener('hashchange',function() {
if (window.location.hash != "") {
// We have a hash, use it!
LoadIDWithURL('#content-right','MyPage'+window.location.hash.substring(1)+'.html');
} else {
// We do not have a hash, force page reload!
window.history.go(0);
}
});
});
// Load the targetID with the URL loadURL.
function LoadIDWithURL(targetID,loadURL) {
$(targetID).load(loadURL);
}
</script>