最近遇到一个奇怪的问题。IE9下面,不打开控制台代码无法正常运行,
一打开控制台就没有问题了。
对于惯于用控制台调试bug的人来讲,打开控制台,问题就没了,还怎么调试。
灵机一动想起来不知道哪本书上看到的。onerror方法的改写。似乎挺合适这种情况。多看书果然有好处。于是一试。
原始代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>error</title>
</head>
<body>
<script>
console.log(123);
alert('Running normally!');
</script>
</body>
</html>
从浏览器一打开就没打开过控制台的话,这段代码在IE9或360兼容模式下是不会弹出Running normally!的。
如果打开了,请关闭浏览器重新打开。
现在增加onerror方法:
window.onerror= function(){
var htmlArr = [];
for (var i = 0; i < arguments.length; i++) {
htmlArr.push(arguments[i].toString());
}
alert(htmlArr.join('\n'));
return true;
}
console.log(123);
alert('Running normally!');
不开控制台的情况下,遇到错误弹出(错误原因、文件、行号)
console未定义
error.html
19
原理:修改window.onerror方法会在代码遇到错误时进行一些你自定义的操作。比如这里输出错误信息(arguments中拿)。
于是问题就找到了。查一下就知道。在早期的IE浏览器中,有时console对象需要
在控制台打开后才会存在。
于是全局添加一个防止console报错的函数。这里只对console.log作了处理,因为用得多。现在我们公司的库的公共文件里都加上了这一句。以避免console在IE下的bug。当然,理论上console在生产环境上还是要少用。只是以防万一。
;(function(){
if(!window.console){
window.console = {}
console.log = function(){}
}
})();
至此,问题解决。IE9下运行。弹出Running normally!
删除window.onerror方法。
这里主要记录两点:
1.IE下的console的bug。
2.使用window.onerror在不打开控制台的情况下弹出错误信息解决一些不方便打开控制台的bug。
转载注明出处:http://blog.youkuaiyun.com/liusaint1992/article/details/76554763