IE9不能直接引用Console

问题:前端

公司有个项目,功能很简单,读取业务数据,展现在页面上。浏览器

一个很简单的问题,却由于目标浏览器是IE9,卡了三天。ide

前端给的反馈是:调试

在IE9下,程序一下子对,一下子不对……第一次刷不出来,多刷几回就刷出来了。

这些话,听着就以为怪,若是听之任之,就成了不明就里一笔糊涂帐。code

因而,我开始跟他们一块儿调试,就在你们快要放弃的时候,我发现,这个“一下子对,一下子不对”跟console对象的引用有关,只要把引用了console对象的语句注释掉,脚本的运行结果就老是正确,反之,就“一下子对,一下子不对”。对象

BUG找到了,但我仍是以为这个console得完全搞清楚,否则还得至少踩两三年的坑。rem

Does IE9 support console.log, and is it a real function?get

In Internet Explorer 9 (and 8), the console object is only exposed when the developer tools are opened for a particular tab. If you hide the developer tools window for that tab, the console object remains exposed for each page you navigate to. If you open a new tab, you must also open the developer tools for that tab in order for the console object to be exposed.

真不知道这家伙从哪学会的秘籍,这么诡异的现象,即使本身发现了,也不敢这样总结。it

结论:io

IE9不能直接引用console,一旦语句中出现console引用,后面的代码就再也不执行了,console就像个黑洞,把光都吸走了,无影无踪。

一旦你想要借助Development Tools去调试一下,看看是否是console引用出了问题,IE9就会立刻建立一个console对象,而后这个BUG就不见了!这时候你关掉Development Tools,console依然还在……下次你再打开新页面,console又成了黑洞。

若是没有旁人的帮助,不大可能从这个坑里爬出来的,咱们只能告诉客户,程序在IE9中运行的结果是“一会对,一下子不对,好像是随机的……”。

解决方法:

window.console复制给console

console = window.console || {};

而后再给这个空的console对象,添加一些空的方法,让它们在IE9以及其余不支持console的浏览器上不要抛异常,好让咱们的程序顺利执行。

相关文章
相关标签/搜索