Javascript TypeError:无法读取属性';控制台';空的
以下是从第三方库中提取的有罪片段:Javascript TypeError:无法读取属性';控制台';空的,javascript,Javascript,以下是从第三方库中提取的有罪片段: function hasConsoleLogger() { return window.console && window.console.log; } 没什么特别的,但它令人惊讶地返回: TypeError:无法读取null的属性“console” 它在浏览器上下文(Chrome)中执行,因此不涉及Node.js非窗口内容 我已检查是否存在潜在的恶意删除窗口或窗口=null,但未成功 出现此错误的应用程序使用友好的iframe和do
function hasConsoleLogger() {
return window.console && window.console.log;
}
没什么特别的,但它令人惊讶地返回:
TypeError:无法读取null的属性“console”
它在浏览器上下文(Chrome)中执行,因此不涉及Node.js非窗口内容
我已检查是否存在潜在的恶意删除窗口
或窗口=null
,但未成功
出现此错误的应用程序使用友好的iframe和document.write()调用运行
不幸的是,我不能提供任何演示链接的问题
因此,我想我的问题是“浏览器中的窗口对象怎么会被取消或错误地无法访问?”当窗口关闭时,Chrome首先设置
窗口。控制台设置为null
,然后设置窗口
以下代码将通过创建从不同上下文引用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);
var w=window.open('/');
//使用document.write在另一个窗口的上下文中运行代码
w、 write('opener.func=function(){return window;};');
w、 close();
//等待垃圾回收的朴素计时器
setTimeout(函数(){
console.log(func()==null);//true
}, 100);
我刚刚试着做:window=null代码>;它在Chrome中无声地失败了。依我看,它足够聪明来阻止这种分配。它是在全局范围内还是在一个函数内?