zoukankan      html  css  js  c++  java
  • 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 }());

  • 相关阅读:
    Android Studio配置 AndroidAnnotations——Hi_博客 Android App 开发笔记
    Android请求网络共通类——Hi_博客 Android App 开发笔记
    Html Agility Pack 解析Html
    Asp.Net Mvc 使用WebUploader 多图片上传
    JavaScript初探 二
    JavaScript初探 三
    JavaScript初探 四
    JavaScript初探一
    async & await 的前世今生(Updated)
    Grunt基础知识介绍
  • 原文地址:https://www.cnblogs.com/deryck/p/4357277.html
Copyright © 2011-2022 走看看