2011-01-07 48 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等)是跨瀏覽器完全共享的,所以知道你想要做什麼來建議替代方案可能會有幫助。 – 2011-01-07 21:15:13

+0

有趣的觀察:在IE中獲取位置對象的構造函數名稱也失敗。使用技巧在http://stackoverflow.com/questions/332422/how-do-i-get-the-name-of-an-objects-type-in​​-javascript – kander 2011-01-07 21:20:15

回答

1

編輯:關於你的問題下的評論,這聽起來像你需要測試一個DOM元素和一個Location對象之間的區別。

使用nodeType屬性測試DOM元素可能會更好。

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

然後你就可以測試各種屬性,如果nodeType沒有被發現,只是要確定它是一個location對象。

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

原來的答覆:

這在Chrome,Safari瀏覽器,Firefox的工作對我來說:

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

我可以在IE右鍵這一分鐘不考,但。

這是在ECMAScript規範Section 8.6.2中記下的獲取內部[[Class]]屬性名稱的方法。

0
location.constructor == Location 

在IE和Firefox;在Chrome中無法使用。 (在Chrome中沒有Location對象。)但是,只有在腳本運行時從同一窗口測試位置時纔有效。

你真的想做什麼?

相關問題