2011-02-13 79 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; 
}