IE8使用console会导致页面阻塞

前言

JS里经常会使用console.log()来调试程序(这是不对的), 结果在IE8里面发现AJAX执行不了, 一开始以为是IE8不支持JSONP, 后来才知道原来是console的锅。

原因

console对象调用log()方法打印日志, 这个操作在IE8的正式环境是行不通的。
因为在IE8中, console对象只有在Dev Toolbar 开发者工具打开的时候才会创建, 如果在正式环境下, console对象没有创建, 而JS代码去调用了console.log()就会抛出找不到console对象的错误, 导致后续的代码无法执行。

解决方案

最好的解决方案就是不使用console.log()调试, 使用浏览器Dev Toolbar 开发者工具提供的断点进行debug

但是
代码开发人员的素质水平参差不齐, 所以还是要兼容console

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 避免出现console错误
(function() {
var methods = [
'assert', 'clear', 'count', 'debug', 'dir', 'dirxml', 'error',
'exception', 'group', 'groupCollapsed', 'groupEnd', 'info', 'log',
'markTimeline', 'profile', 'profileEnd', 'table', 'time', 'timeEnd',
'timeStamp', 'trace', 'warn'
];
var length = methods.length;
var console = (window.console = window.console || {});

while (length--) {
var method = methods[length];

// method不存在则设置默认方法
if (!console[method]) {
console[method] = function () { alert('not support!') };
}
}
}());

参考资料