我已经构建了一个使用History.js插件的网站,使用AJAX在页面之间导航,并相应地更新URL。一切都运行良好,除了IE;当您刷新页面时,它实际上会加载您来到的第一页的内容,而不是当前页面内容。在“体面”的浏览器中,它不会从任何页面加载内容,它只会加载该URL的整个页面,这就是我应该做的IE。
我认为它不明白如何处理哈希。如果您访问http://www.crownacre.voyced.com/contact-us/它可以正常工作,但是当您访问http://www.crownacre.voyced.com/#contact-us/(使用哈希)时,它不会。
如果在路径名中检测到#,我试图重定向该页面,但是没有办法将其检测为window.location.pathname和History.getHash()返回没有任何哈希的路径。
有什么建议吗?我见过一些使用这个插件的网站有同样的问题,这里有类似的问题,但没有解决方案。
提前致谢!
答案 0 :(得分:3)
我在重写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而不是root的情况。这个黑客似乎处理了这种情况。
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;
});
}
答案 1 :(得分:2)
这对我有用:
<script>
var url = new String(document.location);
if (url.indexOf("#") > -1) {
alert("There is a Hash in the path");
}
</script>
修改强>
function LocationTest()
{
var loc = window.location;
alert(loc.href);
alert(loc.protocol + "//" + loc.host + loc.pathname + loc.search + loc.hash);
alert(loc.href == loc.protocol + "//" + loc.host + loc.pathname + loc.search + loc.hash);
}
答案 2 :(得分:1)
也许是一个解决方案: 你可以试试我的前叉的History.js非官方版本1.8a2: https://github.com/andreasbernhard/history.js
...并提供反馈意见?非常感谢你!