我使用Firebug,并有一些语句像:
console.log("...");
在我的页面上。在IE8(可能是更早的版本),我得到脚本错误说“控制台”是未定义的。我试着把这个放在我页面的顶部:
<script type="text/javascript">
if (!console) console = {log: function() {}};
</script>
我还是会得到错误。有办法消除错误吗?
我使用Firebug,并有一些语句像:
console.log("...");
在我的页面上。在IE8(可能是更早的版本),我得到脚本错误说“控制台”是未定义的。我试着把这个放在我页面的顶部:
<script type="text/javascript">
if (!console) console = {log: function() {}};
</script>
我还是会得到错误。有办法消除错误吗?
当前回答
对于IE8或控制台支持仅限于console.log(没有调试,跟踪,…),您可以执行以下操作:
如果console或console.log未定义:为 控制台函数(跟踪,调试,日志,…) 窗口。控制台= { Debug: function(){},…}; 否则,如果console.log被定义(IE8)和console.debug(任何其他)没有定义:重定向所有日志功能到console.log,这允许保留这些日志! 窗口。控制台= { 调试:window.console.log,…};
不确定在各种IE版本中的assert支持,但欢迎任何建议。也在这里发布了这个答案:我如何在Internet Explorer中使用控制台登录?
其他回答
if (typeof console == "undefined") {
this.console = {
log: function() {},
info: function() {},
error: function() {},
warn: function() {}
};
}
要在IE中调试,请查看这个log4javascript
我使用的是fauxconsole;我修改了css一点,使它看起来更好,但工作得很好。
在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() {};
}
Try
if (!window.console) console = ...
未定义的变量不能直接引用。但是,所有全局变量都是全局上下文(浏览器为窗口)同名的属性,访问未定义的属性是可以的。
或者使用if (typeof console === 'undefined') console =…如果你想避开神奇的变量窗口,请参阅@Tim Down的回答。