这是从第三方lib中提取的有罪片段:
function hasConsoleLogger() {
return window.console && window.console.log;
}
没有什么花哨的,但令人惊讶的是:
TypeError: Cannot read property 'console' of null
它在浏览器上下文(Chrome)中执行,因此不涉及Node.js非窗口内容。
我已检查潜在的恶意delete window
或window = null
但未成功。
发生此错误的应用程序使用Friendly iFrames和document.write()调用运行。
很遗憾,我无法提供该问题的任何演示链接。
所以我想我的问题是"在浏览器中,窗口对象如何被无效或无法访问?"
答案 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);