使用 IE F12 开发者工具,选择不同的“文档模式” 从IE7 - IE9,只有IE9正常!
<!DOCTYPE html> <html> <script type= "text/javascript" > if (console) document.write( "console 正常" ); else document.write( "console 异常" ); if (!window.console){ var console={ log: function (msg){} } } </script> </html> |
只要将代码修改为如下,即可解决问题,在所有模式下都正常!。但是终究没有明白,上面的写法的问题本源!
if (!window.console){ window.console={ log: function (msg){} } } |
你是☞,上面多出来的一个if else吗?
因为ie-less-than-9版本不支持console不支持,所以console的类型是Undefined的,调用任何方法都将返回抛出异常“对象为 null 或未定义”而阻塞执行。
变量的调用,必须是前面已经声明,否则获取的变量值是undefined。(函数可以出现在同一段代码脚本的后面)
所以最好的解决方法是,在你的js-code之前定义以下代码:
if(!window.console){var console={log:function(msg){}}}
现在console被定义了,不会抛出异常,被静静的忽略了function(msg){}。
if(!window.console){
var console={
log:function(msg){}
}
}
if(console)
document.write("console 正常");
else
document.write("console 异常");
这样一样也会正常,!window.console时,没有console对象, 你自定义了一个,就在下面的判断中找到了这个console对象了,就 不会出现异常了。
感觉应该浏览器某些版本的BUG。类似:if(-[1,]){ alert("非IE"); }else{ alert("IE"); }
经过测试:IE9、IE10弹出“非IE”。