tarheelreader.org の書き直しで同じ問題に遭遇しました。History.js を使用していますが、IE8 の更新の問題を除いて正常に動作しています。このハックは私のために働いています。
最初のページの読み込み時にのみ実行される私のスタートアップ コードでは、次のようにします。
var url = window.location.href;
if (url.indexOf('#') > -1) {
// ie refresh hack
controller.stateChange();
}
controller.stateChange()
すべての履歴の変更に使用する状態変更ハンドラーはどこにありますか。
function stateChange() {
// handle changes in the URL
var hist = History.getState(),
url = hist.url,
context = hist.data;
renderUrl(url, context).then(function(title) {
document.title = title;
});
}
main.js と controller.js のすべてのコードは、https: //github.com/gbishop/TarHeelReaderTheme で確認できます。
編集
さらに調査した結果、History.js がルートではなく初期 URL を使用しているケースにたどり着きました。このハックはそのケースを処理するようです。
function stateChange() {
// handle changes in the URL
var hist = History.getState(),
url = hist.url,
bar = window.location.href,
context = hist.data;
//console.log("State changed...", url, context);
if (url != bar && bar.indexOf('#') > -1) {
//console.log('bar = ', bar);
// I think we only get here in IE8
// hack for hash mode urls
var root = History.getRootUrl(),
hashIndex = bar.indexOf('#');
if (root != bar.slice(0, hashIndex)) {
// try to fix the url
url = root + bar.slice(hashIndex);
//console.log('new url =', url);
window.location.href = url;
}
}
renderUrl(url, context).then(function(title) {
document.title = title;
});
}