IE8&9出现js无效,打开控制台之后正常的囧事

本人来调试web的程序的时候有个习惯,比较喜欢用console.log()而不是alert()来查看一些信息,主要觉得弹窗太讨厌了。

最近需要给公司其他部门做一些web程序---------此为故事背景---------

程序给过去之后接到产品小妹的电话说页面用不了,于是自己又检查了一遍,没有发现什么问题。

产品小妹仍旧说有问题,无奈过去她那边看。

看着产品小妹演示一遍,确实有问题,是脚本没有触发。

纳闷了,换自己操作一遍(顺手打开了bug窗口),诡异的事情就发生了,什么还没做程序就OK了。

顿时就觉得很诧异,为什么会这样呢?而且之后换产品小妹自己操作,也OK,为什么会这么诡异?

换了台电脑也是如此,然后由我来操控就OK了。

想了一下肯定是我自己的操作跟小妹有不一样的地方,接着就想到了我会去开调试窗口,肯定是这个原因。

查了一下相关资料,果不其然!

IE8 与IE9 的console对象只有在打开了bug窗口之后才会被创建。之后的版本才解决了这个问题。

找了一个IE8验证一下:

<script>
alert("typeof console" + typeof console);
</script>

 未打开调试窗口

打开调试窗口后:

如图,打开调试窗口后,console对象被创建,问题消失了

妹子是IE9,自己则是IE11,因为忽略了IE这一点特性,而且又没判断。导致了这一次的问题

知道问题所在后,那就好解决了。

当然了,我们可以删掉这些console代码,反正都是调试的

不过,如果太多的话,我们可以重写console对象以及它的方法,这样的话js就不会出错了

 1 (function() {
 2 var method;
 3 var noop = function () {};
 4 var methods = [
 5 'assert', 'clear', 'count', 'debug', 'dir', 'dirxml', 'error',
 6 'exception', 'group', 'groupCollapsed', 'groupEnd', 'info', 'log',
 7 'markTimeline', 'profile', 'profileEnd', 'table', 'time', 'timeEnd',
 8 'timeline', 'timelineEnd', 'timeStamp', 'trace', 'warn'
 9 ];
10 var length = methods.length;
11 var console = (window.console = window.console || {});
12 while (length--) {
13 method = methods[length];
14 if (!console[method]) {
15 console[method] = noop;
16 }
17 }
18 }());

原文地址:https://www.cnblogs.com/deryck/p/4357277.html