TypeError:无法读取null的属性“console”

时间:2013-04-16 09:22:50

标签: javascript

这是从第三方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()调用运行。

很遗憾,我无法提供该问题的任何演示链接。

所以我想我的问题是"在浏览器中,窗口对象如何被无效或无法访问?"

1 个答案:

答案 0 :(得分:4)

当窗口关闭时,Chrome首先将window.console设为null,然后设为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);