5

このようにして、ブラウザがサポートしているonHashChangeかどうかを確認しようとしています。サポートしていない場合は、一部のコードを非表示にします。

if(window.onhashchange){
    ...code...
} else {
   ...other code...
}

私もこれを試しました:

if(typeof window.onhashchange === "function"){
    alert("Supports");  
} else {
    alert("Doesn't Supports");  
}

Quirksmodeで説明されているように、これは機能するはずですが、alertたとえばintrue stateを実行するとSafari、アラートが表示されますが、SafariはonHashChange:Sをサポートしていません。

何が問題なのですか?正しい方向に進んでいない場合、どのように確認すればよいですか?

4

4 に答える 4

22

このイベントは、次のin演算子を使用して検出できます。

if ("onhashchange" in window) {
  //...
}

参照:

于 2010-10-27T06:26:27.740 に答える
6

存在推論(ウィンドウの「onhashchange」など)よりも機能検出を使用する方がよいことに注意してください。

@xkitは、IE7がonhashchangeをサポートしていなくても、IE7標準ドキュメントを使用する場合にif( "onhashchange" in window){/ code /}などの存在推論に対してtrueを返すという事実を回避するための、優れた機能テストについて説明しました。IE8のモード。

@xkitが提案したのは、onhashchangeイベントのハンドラー関数内にフラグ(var isSet = true;など)を設定することでした。次に、JavaScriptを使用してwindow.location.hashを変更し、フラグが設定されているかどうかを確認します。

于 2011-08-21T21:06:32.500 に答える
1

使用しているSafariのバージョンではonhashchange、Quirksmodeの記事が作成されてから、イベントのサポートが追加されている可能性があります。テストは引き続き有効です。イベントをサポートしないことがわかっている他のブラウザで試してみてください。

編集:また、イベントにはデフォルトで関数が含まれないため、代わりに@CMSで説明されているメソッドを使用する必要があります。したがって、これらのテストは両方とも失敗します。

于 2010-10-27T06:26:41.950 に答える
1

if(window.onhashchange!== undefined)alert('onhashchangeをサポート');

于 2012-04-09T20:51:16.157 に答える