一个不打开浏览器工具的调试方法

最近遇到一个奇怪的问题。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.csdn.net/liusaint1992/article/details/76554763

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值