3

私は次のコードを持っています

$(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をサポートしているという最初のアラートが表示されますが、ハッシュが変更されても何も起こりません。

何か案は?

4

3 に答える 3

2

これを参照してください:リンク

ブラウザはwindow.onhashchangeをサポートしていますか?

IE7互換モードで実行されているIE8は、イベントがサポートされていない場合でも、ウィンドウの「onhashchange」に対してtrueを報告することに注意してください。したがって、テストも行ってdocument.documentModeください。

var docmode = document.documentMode;
if ('onhashchange' in window && (docmode === undefined || docmode > 7 )) {
    window.onhashchange = checkHash;
}
于 2012-05-07T14:14:30.103 に答える
1

MSDNのドキュメントページに例があります。

基本的に、私は彼らのページにある余分な「マップ」をすべて削除しました。彼らとあなたの例の唯一の違いは、次のメタタグが含まれていることです。

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

これをあなたの例のheadタグに追加しましたが、正常に機能しました。

このメタタグは基本的に、IE 9(まだベータ版)ではなく、IE8にあるかのようにページを実行することを示しています。

このメタタグの詳細については、こちらをお読みください

于 2011-02-13T14:38:51.520 に答える
1

HTML5の新しいhashchangeイベントは、現在のすべてのブラウザーでサポートされています。ブラウザをだましてIE8だと思わせる必要はありません。

このコードは、Win7のIE9、FF 5、Safari 5、およびChrome12で機能します。

<!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>
于 2011-06-29T15:20:42.683 に答える