使用IE 9进行onhashchange

时间:2011-02-13 13:11:55

标签: internet-explorer hashchange

我有以下代码

$(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但是当哈希值发生变化时没有任何反应。

有什么想法吗?

3 个答案:

答案 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>