2011-02-13 62 views
3

我有以下代码onhashchange与IE 9

$(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但是当hash改变什么都没有发生。

任何想法?

回答

1

在MSDN文档page上有一个示例。

基本上,我删除了网页上所有额外的“地图”的东西,他们和你的榜样之间的唯一区别是,它们包括下列元标记:

<meta http-equiv="X-UA-Compatible" content="IE=8" > 

我说这头标记在你的例子中,它工作正常。

这个元标签基本上说是运行页面,就好像它在IE 8中,而不是IE 9(它仍在测试版)。

有关这个元标记的更多信息阅读here

+0

http://caniuse.com/hashchange – DigitalDesignDj 2012-11-07 15:01:08

1

在HTML5新hashchange活动是由当前所有浏览器都支持;没有必要欺骗你的浏览器认为它是IE8。

此代码在IE 9,FF 5,Safari 5的,和Chrome 12在Win 7:

<!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> 
2

看到这个:link

是否浏览器支持window.onhashchange?

注意,在IE7兼容模式下运行IE8 即使是不支持的情况下,所以也测试document.documentMode报道了在窗口“onhashchange”,真的。

var docmode = document.documentMode; 
if ('onhashchange' in window && (docmode === undefined || docmode > 7)) { 
    window.onhashchange = checkHash; 
}