2011-01-07 5 views
1

FF 3.6とIE 8で次のコードをテストしました。前者の警告true、後者の警告はfalseです。これはなぜですか?両方のブラウザで同じ動作を達成するにはどうすればよいですか?ありがとうございました!IEで「window.location instanceof Location」がfalseになるのはなぜですか?

<!DOCTYPE html> 
<html> 
    <head> 
     <script> 
      alert(window.location instanceof Location); 
     </script> 
    </head> 
    <body> 
    </body> 
</html> 
+2

おそらく、この小切手の目的は何かを説明する必要がありますか?私はそのような内部クラス名(Location、HTMLElementなど)はブラウザ間で完全に共有されているとは思わないので、代替案を提案するために何をしようとしているのかを知ることは有益かもしれません。 –

+0

興味深い観測:IEでのロケーションオブジェクトのコンストラクタ名の取得も失敗します。 http://stackoverflow.com/questions/332422/how-do-i-get-the-name-of-an-objects-type-in​​-javascript – kander

+0

私はjQueryプラグインを開発していますJS関数へのURLアンカー。プラグインは引数をとります。引数はDOM要素か 'Location'オブジェクトのいずれかです。だから私は、ある種の議論がどのようなものであるかを調べる方法が必要です。 :) –

答えて

1

EDIT:あなたの質問のコメントに関しては、DOM要素とLocationオブジェクトの違いをテストする必要があるようです。

nodeTypeプロパティを使用してDOM要素のテストを行う方がよいでしょう。 nodeTypeが見つからなかった場合

if(obj.nodeType) { 
    // it was a DOM element 
} 

次に、あなたはそれがlocation対象である特定のように、様々な性質のためにテストすることができます。

if(obj.nodeType) { 
    // it was a DOM element 
} else if(obj.hostname && obj.pathname) { 
    // it was a location object 
} else { 
    // some ERROR 
} 

オリジナルの答え:

これはクローム、サファリ、Firefoxで私の作品:

Object.prototype.toString.call(window.location) == '[object Location]'; 

でも、私は、IEで右この分をテストすることはできません。

これは、内部の[[Class]]プロパティ名を取得するためのECMAScript仕様書Section 8.6.2に記載されているメソッドです。

+0

IEで '[object Object]'を返します。 :( –

+0

@Philippe:はい、ちょうどそれもテストを終えました。これが必要な場合は、[答え](http://stackoverflow.com/questions/4630313/why- [@Phrogz](http://stackoverflow.com/users/405017/phrogz)のfrom-window-location-instanceof-location-false-in-ie/4630355#4630355)編集:それは失敗するようですがIE7。 – user113716

+0

あなたは間違いなく正しいです!ありがとうございます!:) –

0
location.constructor == Location 

IEとFirefoxで動作します。 Chromeでは動作しません。 (ただし、ChromeにはLocationオブジェクトはありません)。ただし、スクリプトが実行されているときと同じウィンドウから場所をテストする場合にのみ機能します。

あなたは本当に何をしようとしていますか?

関連する問題