我在重写 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;
});
}
您可以在https://github.com/gbishop/TarHeelReaderTheme查看 main.js 和 controller.js 中的所有代码
编辑
进一步探索导致 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;
});
}