IE9不能直接引用Console
问题:
公司有个项目,功能很简单,读取业务数据,展示在页面上。
一个很简单的问题,却因为目标浏览器是IE9,卡了三天。
前端给的反馈是:
在IE9下,程序一会儿对,一会儿不对……第一次刷不出来,多刷几次就刷出来了。
这些话,听着就觉得怪,如果听之任之,就成了不明就里一笔糊涂账。
于是,我开始跟他们一起调试,就在大家快要放弃的时候,我发现,这个“一会儿对,一会儿不对”跟console对象的引用有关,只要把引用了console对象的语句注释掉,脚本的运行结果就总是正确,反之,就“一会儿对,一会儿不对”。
BUG找到了,但我还是觉得这个console得彻底搞清楚,不然还得至少踩两三年的坑。
Does IE9 support console.log, and is it a real function?
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.
真不知道这家伙从哪学会的秘籍,这么诡异的现象,即便自己发现了,也不敢这样总结。
结论:
IE9不能直接引用console
,一旦语句中出现console
引用,后面的代码就不再执行了,console
就像个黑洞,把光都吸走了,无影无踪。
一旦你想要借助Development Tools去调试一下,看看是不是console
引用出了问题,IE9就会马上创建一个console
对象,然后这个BUG就不见了!这时候你关掉Development Tools,console
依然还在……下次你再打开新页面,console
又成了黑洞。
如果没有旁人的帮助,不大可能从这个坑里爬出来的,我们只能告诉客户,程序在IE9中运行的结果是“一会对,一会儿不对,好像是随机的……”。
解决方法:
把window.console
复制给console
console = window.console || {};
然后再给这个空的console
对象,添加一些空的方法,让它们在IE9以及其他不支持console的浏览器上不要抛异常,好让我们的程序顺利执行。
原文地址:https://segmentfault.com/a/1190000017394843
相关推荐
-
HTTP基本知识、跨域和调试技巧 javascript/jquery
2019-4-19
-
js 禁止鼠标和键盘行为 javascript/jquery
2019-8-15
-
解决浏览器保存密码自动填充问题 javascript/jquery
2020-5-28
-
【图文详解】200行JS代码,带你实现代码编译器(人人都能学会) javascript/jquery
2020-5-28
-
【Flutter工具】可能是Flutter上最简单的本地数据保存方案 javascript/jquery
2020-5-28
-
10个超好用的配色网站 javascript/jquery
2020-6-10
-
Nuxt.js 实战集锦 javascript/jquery
2020-6-16
-
pjax页面切换监听url变化 javascript/jquery
2020-5-28
-
ckeditor4+mathtype+latex数学公式集成解析方案 javascript/jquery
2020-5-22
-
单线程的JavaScript如何通过事件循环实现异步 javascript/jquery
2020-5-26