2011-01-07 4 views
1

Ich habe den folgenden Code in FF 3.6 und IE 8 getestet. Die früheren Warnungen true, letztere Warnungen false. Warum ist das und wie kann ich das gleiche Verhalten in beiden Browsern erreichen? Vielen Dank!Warum ist "window.location instanceof Location" in IE falsch?

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

Vielleicht sollten Sie erklären, was der Zweck dieser Überprüfung ist? Ich glaube nicht, dass solche internen Klassennamen (Location, HTMLElement usw.) vollständig in allen Browsern geteilt werden. Daher könnte es hilfreich sein zu wissen, was Sie tun möchten, um Alternativen vorzuschlagen. –

+0

Interessante Beobachtung: Das Abrufen des Konstruktornamens des Standortobjekts in IE schlägt ebenfalls fehl. Mit der Technik in http://stackoverflow.com/questions/332422/how-do-i-get-the-name-of-an-objects-type-in-javascript – kander

+0

Ich arbeite an einem jQuery-Plugin, das mappt URL-Anker zu JS-Funktionen. Das Plugin übernimmt ein Argument, das entweder ein DOM-Element oder ein 'Location'-Objekt sein kann. Ich brauche also einen Weg, um zu überprüfen, was ein Argument ist. :) –

Antwort

1

BEARBEITEN: In Bezug auf den Kommentar unter Ihrer Frage, es klingt wie Sie für den Unterschied zwischen einem DOM-Element und einem Location-Objekt testen müssen.

Mit der Eigenschaft nodeType werden Sie wahrscheinlich besser das DOM-Element testen können.

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

Dann können Sie auf verschiedene Eigenschaften testen, ob nodeType nicht gefunden wurde, nur um sicher zu sein, es ist ein location Objekt ist.

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

Ursprüngliche Antwort:

Dies funktioniert für mich in Chrome, Safari, Firefox:

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

ich in IE nicht richtig in dieser Minute testen, though.

Dies ist die in der ECMAScript-Spezifikation Section 8.6.2 angegebene Methode zum Abrufen des internen [[Class]]-Eigenschaftsnamens.

+0

Gibt '[object Object]' in IE zurück. :( –

+0

@Philippe: Ja, ich habe es gerade gemacht. Wenn es nötig ist, müssen Sie vielleicht ein paar separate Tests machen, einschließlich [die Antwort] (http://stackoverflow.com/questions/4630313/why- is-window-location-instanceof-location-false-in-ie/4630355 # 4630355) von [@Phrogz] (http://stackoverflow.com/users/405017/phrogz) EDIT: Obwohl das scheint zu scheitern IE7. – user113716

+0

Sie haben offensichtlich Recht! Vielen Dank für Ihre Hilfe! :) –

0
location.constructor == Location 

Works in IE und Firefox; funktioniert nicht in Chrome. (In Chrome gibt es kein Objekt Location.) Funktioniert nur, wenn Sie den Speicherort aus demselben Fenster testen, in dem das Skript ausgeführt wird.

Was versuchen Sie wirklich?