我有以下代码
$(document).ready(function() {
if ("onhashchange" in window) {
alert("The browser supports the hashchange event!");
}
function test(){
alert("hash has changed = " + window.location.hash)
}
window.onhashchange =test;
}
我点击了更改哈希的链接,在所有其他浏览器中,我在test
然而,在IE中,我得到第一个警告,说它支持onhashchange但是当哈希值发生变化时没有任何反应。
有什么想法吗?
答案 0 :(得分:2)
请参阅:link
浏览器是否支持window.onhashchange?
请注意,在IE7兼容模式下运行的IE8报告窗口中的'onhashchange'为true,
即使不支持该事件,也请测试document.documentMode
。
var docmode = document.documentMode;
if ('onhashchange' in window && (docmode === undefined || docmode > 7 )) {
window.onhashchange = checkHash;
}
答案 1 :(得分:1)
MSDN文档page上有一个示例。
基本上,我删除了他们页面上所有额外的“地图”内容,他们和你的例子之间的唯一区别是它们包含以下元标记:
<meta http-equiv="X-UA-Compatible" content="IE=8" >
我在你的例子中将它添加到head标签中,并且工作正常。
这个元标记基本上表示运行页面就好像它在IE 8中而不是IE 9(仍在测试版中)。
有关此元标记的详细信息,请阅读here
答案 2 :(得分:1)
所有当前浏览器都支持HTML5中的新hashchange事件;没有必要欺骗你的浏览器认为它是IE8。
此代码适用于Win 7中的IE 9,FF 5,Safari 5和Chrome 12:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script>
window.onhashchange = doThisWhenTheHashChanges;
function changeTheHash()
{
var newHashValue = document.getElementById("newHashInput").value;
var currentLocation = window.location.pathname;
window.location.hash = newHashValue;
}
function doThisWhenTheHashChanges()
{
alert("The hash has changed!");
}
</script>
</head>
<body>
<h1>Hash Change Test</h1>
<form>
<input type="text" id="newHashInput" autofocus>
<input type="button" value="Set" onclick="changeTheHash()">
</form>
</body>
</html>