2013-04-16 80 views
9

這裏有來自第三方的lib中提取的有罪片段:類型錯誤:無法讀取空的特性「控制檯」

function hasConsoleLogger() { 
    return window.console && window.console.log; 
} 

沒什麼特別,但令人驚訝的返回: TypeError: Cannot read property 'console' of null

它在瀏覽器中執行上下文(Chrome),因此不涉及Node.js的非窗口內容。

我檢查了潛在的惡意delete windowwindow = null沒有成功。

發生此錯誤的應用程序在Friendly iFrames和document.write()調用中運行。

不幸的是,我無法提供任何問題的演示鏈接。

所以我想我的問題是「在瀏覽器中,窗口對象怎麼可能被無效或無法訪問呢?」

+0

我只是試圖做:'窗口= NULL;';它在Chrome中靜默失敗。國際海事組織,它足夠聰明,可以防止這種轉讓。 – SuperSaiyan

+0

它在全局範圍內還是在一個函數內? – user2264587

回答

4

當窗口關閉時,Chrome首先設置window.consolenull,然後window

下面的代碼將可靠地重現該錯誤,通過創建從一個不同的上下文引用window的函數:

var w = window.open('/'); 
// Using document.write to run code in the context of the other window 
w.document.write('<script>opener.func = function(){return window;};</script>'); 
w.close(); 
// Naive timer to wait for Garbage collection 
setTimeout(function() { 
    console.log(func() === null); // true 
}, 100); 
相關問題