今天遇到一个很难受的问题,项目要求兼容 IE9,在登录时总是有一个按钮点击没反应,但是只要 f12 开发调试工具就好用,其他的浏览器比如 chrome 都没问题,想了一上午解决方法,问题的关键就是为啥只要打开调试工具就好使!
后来在网上查了很多资料,才发现一个问题就是在 IE8 / 9 上在不打开调试工具的情况下window 上是没有 console 这个属性的!在打开调试工具的时候会给 window 再挂载上 console 属性,所以需要兼容 console 。。。知道了问题所在就好解决了,下面贴一下兼容性代码:
(function() {
var method;
var noop = function () {};
var methods = [
'assert', 'clear', 'count', 'debug', 'dir', 'dirxml', 'error',
'exception', 'group', 'groupCollapsed', 'groupEnd', 'info', 'log',
'markTimeline', 'profile', 'profileEnd', 'table', 'time', 'timeEnd',
'timeline', 'timelineEnd', 'timeStamp', 'trace', 'warn'
];
var length = methods.length;
var console = (window.console = window.console || {});
while (length--) {
method = methods[length];
// Only stub undefined methods.
if (!console[method]) {
console[method] = noop;
}
}
}());
// 注:经验证在IE7/8/9下有效。
虽然 IE11 以下的版本离我们越来越远,但是浏览器的兼容性问题确实是一场持久战!