Internet Explorer的“控制台”是未定义的错误

可紊 提交于 2020-02-25 20:59:32

我正在使用Firebug,并且有一些类似的语句:

console.log("...");

在我的页面中。 在IE8(可能也是早期版本)中,我收到脚本错误,提示“控制台”未定义。 我尝试将其放在页面顶部:

<script type="text/javascript">
    if (!console) console = {log: function() {}};
</script>

仍然我得到错误。 有什么办法摆脱错误?


#1楼

在IE9中,如果未打开控制台,则此代码:

alert(typeof console);

将显示“对象”,但是此代码

alert(typeof console.log);

将抛出TypeError异常,但不返回未定义的值;

因此,保证版本的代码将类似于以下内容:

try {
    if (window.console && window.console.log) {
        my_console_log = window.console.log;
    }
} catch (e) {
    my_console_log = function() {};
}

#2楼

if (typeof console == "undefined") {
  this.console = {
    log: function() {},
    info: function() {},
    error: function() {},
    warn: function() {}
  };
}

#3楼

将以下内容粘贴到JavaScript的顶部(在使用控制台之前):

/**
 * Protect window.console method calls, e.g. console is not defined on IE
 * unless dev tools are open, and IE doesn't define console.debug
 * 
 * Chrome 41.0.2272.118: debug,error,info,log,warn,dir,dirxml,table,trace,assert,count,markTimeline,profile,profileEnd,time,timeEnd,timeStamp,timeline,timelineEnd,group,groupCollapsed,groupEnd,clear
 * Firefox 37.0.1: log,info,warn,error,exception,debug,table,trace,dir,group,groupCollapsed,groupEnd,time,timeEnd,profile,profileEnd,assert,count
 * Internet Explorer 11: select,log,info,warn,error,debug,assert,time,timeEnd,timeStamp,group,groupCollapsed,groupEnd,trace,clear,dir,dirxml,count,countReset,cd
 * Safari 6.2.4: debug,error,log,info,warn,clear,dir,dirxml,table,trace,assert,count,profile,profileEnd,time,timeEnd,timeStamp,group,groupCollapsed,groupEnd
 * Opera 28.0.1750.48: debug,error,info,log,warn,dir,dirxml,table,trace,assert,count,markTimeline,profile,profileEnd,time,timeEnd,timeStamp,timeline,timelineEnd,group,groupCollapsed,groupEnd,clear
 */
(function() {
  // Union of Chrome, Firefox, IE, Opera, and Safari console methods
  var methods = ["assert", "cd", "clear", "count", "countReset",
    "debug", "dir", "dirxml", "error", "exception", "group", "groupCollapsed",
    "groupEnd", "info", "log", "markTimeline", "profile", "profileEnd",
    "select", "table", "time", "timeEnd", "timeStamp", "timeline",
    "timelineEnd", "trace", "warn"];
  var length = methods.length;
  var console = (window.console = window.console || {});
  var method;
  var noop = function() {};
  while (length--) {
    method = methods[length];
    // define undefined methods as noops to prevent errors
    if (!console[method])
      console[method] = noop;
  }
})();

函数闭包包装器将范围限定为不定义任何变量。 这可以防止未定义的console和未定义的console.debug (以及其他缺少的方法)。

编辑:我注意到, HTML5 Boilerplate在其js / plugins.js文件中使用了类似的代码,如果您正在寻找一种(可能)保持最新的解决方案。


#4楼

您可以使用以下内容为您提供涵盖所有基础的额外保险。 首先使用typeof将避免任何undefined错误。 使用===还将确保类型的名称实际上是字符串“ undefined”。 最后,您要向函数签名添加一个参数(我任意选择logMsg )以确保一致性,因为您确实将要打印到控制台的所有内容都传递给了log函数。 这还可以确保您的智能感知准确,并避免在JS感知IDE中出现任何警告/错误。

if(!window.console || typeof console === "undefined") {
  var console = { log: function (logMsg) { } };
}

#5楼

要在IE中进行调试,请查看此log4javascript

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!