我有一个使用哈希导航的ajax webapp(JSF 2.0)。
我在this answer和setInterval()
的帮助下使用了事件触发来检查旧浏览器中的值更改(主要是IE6 + 7)。
执行此操作的Javascript代码:
window.onload = window.onhashchange = function() {
lastHash = window.location.hash; // To save a refresh on browsers that don't need it.
var fragment = document.getElementById('fragment');
fragment.value = window.location.hash;
fragment.onchange();
}
// Old Browsers That don't support onhashchange...
var lastHash = window.location.hash;
function checkFragment() {
if (window.location.hash != lastHash) {
lastHash = window.location.hash;
var fragment = document.getElementById('fragment');
fragment.value = window.location.hash;
fragment.onchange();
}
}
这很好用。这意味着,当我更改哈希值时,AJAX应用程序会获取通知和更新。
其中一个不起作用的实例是IE 6/7。当我按后退/前进按钮时,我可以看到网址栏已使用正确的哈希值更新,但windows.location.hash
似乎没有更改,因此我的SetEvent()
函数未检测到更改
有人找到了解决方法吗? 谢谢!
答案 0 :(得分:2)
考虑使用jQuery Hashchange plugin来避免IE6 / 7兼容性问题。你可以找到code example here。对于您的情况,可以按如下方式进行更改。
<script src="jquery.js"></script>
<script src="jquery-hashchange.js"></script>
<script>
$(function(){
$(window).hashchange(function(){
$('#fragment').val(location.hash).change();
});
$(window).hashchange();
});
</script>