onhashchange с IE 9 - PullRequest
       10

onhashchange с IE 9

3 голосов
/ 13 февраля 2011

У меня есть следующий код

$(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 ]

2 голосов
/ 07 мая 2012

См .: ссылка

Поддерживает ли браузер window.onhashchange?

Обратите внимание, что IE8, работающий в режиме совместимости IE7, сообщает true для 'onhashchange' в окне, даже если событие не поддерживается, проверьте также document.documentMode.

var docmode = document.documentMode;
if ('onhashchange' in window && (docmode === undefined || docmode > 7 )) {
    window.onhashchange = checkHash;
}
1 голос
/ 29 июня 2011

Новое событие hashchange в HTML5 поддерживается всеми текущими браузерами; не нужно обманывать ваш браузер, думая, что это 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>
1 голос
/ 13 февраля 2011

На MSDN есть пример страница .

По сути, я удалил все лишние элементы "карты" на их странице, и единственное различие между ними и вашим примером заключается в том, что они содержат следующий метатег:

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

Я добавил это в тег head в вашем примере, и он работал нормально.

Этот метатег в основном говорит, что страница должна запускаться так, как если бы она была в IE 8, а не в IE 9 (который все еще находится в бета-версии).

Для получения дополнительной информации об этом метатеге прочитайте здесь

...