2012-05-11 1 views
0

すべてのクレジットは、に行く:この方法についてはウィンドウで 'eventhandler'を使用していますか?ウィンドウが特定のイベントハンドラをサポートしているかどうかを判断する安全な方法ですか?

http://benalman.com/news/2010/03/jquery-special-events/#add-and-remove-hashchange

が、やっている場合、我々は思っていた次のウィンドウオブジェクトはonhashchangeイベントをサポートしている場合

if('onhashchange' in window){ 
    console.log('yep, window supports onhashchange'); 
} 
else{ 
    console.log('nope, window does not support onhashchange'); 
} 

が決定する安全な方法ですハンドラ?

ありがとうございました。

+0

[Javascript:onHashchange Test]の可能な複製(http://stackoverflow.com/questions/4030390/javascript-onhashchange-test) – Jeremy

答えて

2

をいいえ、これは、一般的に安全テストではありません。ホストオブジェクト(windowなど)がinオペレータにどのように応答し、古いバージョンのFirefoxを含むいくつかのブラウザでは、イベントハンドラプロパティとしてtrueが返されないという保証はありません。次の資料では詳細があります:

http://perfectionkills.com/detecting-event-support-without-browser-sniffing/

onhashchangeのための特別な行動があった場合を除き、あなたのテストは、Firefox 3.6での偽陰性与えるようonhashchangeは、added in 3.6あったがそれはFirefox added support for detecting event support using the in operator in version 9思わ8.0 - 。

UPDATE

私は今のFirefox 3.6でテストしてみた、あなたのテストが動作するためonhashchangeは特殊なケースであると思われる:'onhashchange' in window trueを返し、'onload' in windowは、例えば、そうではありません。あなたのテストはOKかもしれませんが、私はあなたのすべてのターゲットブラウザを慎重にテストすることをお勧めします。

+0

+1です。 – RobG

+0

私たちは、上記の記事の方法を使用して終了しました。幅広いブラウザに対応しています。 –

0

はい。キー'onhashchange'がオブジェクトwindowに存在するかどうかをチェックし、ブール値を返します。安全でない使用法はありません。

-1

私はこのようにそれを行うだろう:それは比較的新しいものであるため、それは、この特定のイベントのためにOKかもしれないが

if (window.onhashchange) ... 
+0

それはさらに悪いことです。アイデアは、ハンドラが設定されているかどうかではなく、イベントがブラウザによってサポートされているかどうかをチェックすることです。 –

+0

このチェックを行う前に、他のスクリプトが 'window.onhashchange = function(){}'を追加すると無効になります。 – epascarello

+0

私は同意しますが、標準構文ではないif( 'onhashchange'(ウィンドウ内で) 'onhashchange') 'AFAIK ... –

関連する問題