IE中的hashchange事件似乎从iframe内部触发时,从目标为其同域父窗口的锚点触发。考虑以下超级基本HTML页面(为简单起见,故意不使用像jQuery这样的库)。
parent.htm
<!DOCTYPE html>
<html>
<head>
<title>Parent</title>
<script type="text/javascript">
window.onhashchange = function () {
alert(window.location.hash);
};
</script>
</head>
<body>
<p><a href="#A">A</a></p>
<iframe src="child.htm"></iframe>
<script type="text/javascript">
document.write('<p>Loaded at ' + new Date() + '</p>');
</script>
</body>
</html>
child.htm
<!DOCTYPE html>
<html>
<head>
<title>Child</title>
</head>
<body>
<p><a href="parent.htm#B" target="_top">B</a></p>
<p><a href="parent.htm#C" target="_parent">C</a></p>
<p><a href="#" onclick="top.location='parent.htm#D';">D</a></p>
</body>
</html>
在Chrome和Firefox中,所有四个链接(A,B,C,D)都会产生警报。在IE中,链接A和D将触发警报,但是B和C将导致整页重新加载而没有警报。我找不到任何解释这个预期行为的文档。
我可以通过附加事件处理程序破解修复IE子链接的jQuery填充程序,但是有什么方法可以让IE识别哈希变换吗?