'console'是Internet Explorer的未定义错误
我使用的是Firebug,并且有如下的语句:
console.log("...");
在我的页面。 在IE8(也许更早的版本)我得到脚本错误说'控制台'是未定义的。 我试图把它放在我的页面顶部:
<script type="text/javascript">
if (!console) console = {log: function() {}};
</script>
我仍然得到错误。 任何方式摆脱错误?
尝试
if (!window.console) console = ...
未定义的变量不能直接引用。 但是,所有的全局变量都是全局上下文的相同名称的属性(在浏览器的情况下是window
),并且访问未定义的属性是好的。
或者使用if (typeof console === 'undefined') console = ...
如果你想避开魔术变量window
,请参阅@Tim Down的答案。
将以下内容粘贴到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;
}
})();
函数closure封装器将变量的范围限定为不定义任何变量。 这可以防止未定义的console
和未定义的console.debug
(以及其他缺失的方法)。
编辑:我注意到, HTML5 Boilerplate在其js / plugins.js文件中使用类似的代码,如果你正在寻找一个解决方案,可能会(可能)保持最新。
另一种替代方法是typeof
符:
if (typeof console == "undefined") {
this.console = {log: function() {}};
}
另一种选择是使用日志库,比如我自己的log4javascript。
链接地址: http://www.djcxy.com/p/7239.html上一篇: 'console' is undefined error for Internet Explorer
下一篇: How can I open a URL in Android's web browser from my application?