IE9是否支持console.log,它是一个真实的功能吗?

在什么情况下,window.console.log定义在Internet Explorer 9?

即使定义了window.console.logwindow.console.log.applywindow.console.log.call也是未定义的。为什么会这样?

[IE8的相关问题:IE8的console.log怎么了?.]

116774 次浏览

在Internet Explorer 9(和8)中,console对象仅在为特定选项卡打开开发人员工具时才会公开。如果隐藏该选项卡的开发人员工具窗口,则console对象将为您导航到的每个页面保持暴露。如果你打开一个新选项卡,你还必须打开该选项卡的开发人员工具,以便暴露console对象。

console对象不是任何标准的一部分,而是文档对象模型的扩展。像其他DOM对象一样,它被认为是一个宿主对象,不需要继承Object,也不需要继承Function的方法,就像原生ECMAScript函数和对象一样。这就是applycall在这些方法上未定义的原因。在IE 9中,大多数DOM对象被改进为从原生ECMAScript类型继承。由于开发人员工具被认为是IE的扩展(尽管是内置扩展),它们显然没有得到与DOM其他部分相同的改进。

不管怎样,你仍然可以在console方法上使用一些Function.prototype方法,并使用一点bind()魔法:

var log = Function.prototype.bind.call(console.log, console);
log.apply(console, ["this", "is", "a", "test"]);
//-> "thisisatest"

console.log问题的一个简单解决方案是在JS代码的开头定义以下内容:

if (!window.console) window.console = {};
if (!window.console.log) window.console.log = function () { };

这在所有浏览器中都适用。这将在调试器未激活时为console.log创建一个虚拟函数。当调试器处于活动状态时,将定义console.log方法并正常执行。

如何……

console = { log : function(text) { alert(text); } }

在阅读了Marc climate上面的评论后,我现在改变了我的多功能跨浏览器console.log函数,如下所示:

function log()
{
"use strict";


if (typeof(console) !== "undefined" && console.log !== undefined)
{
try
{
console.log.apply(console, arguments);
}
catch (e)
{
var log = Function.prototype.bind.call(console.log, console);
log.apply(console, arguments);
}
}
}

console.log仅在控制台打开时定义。如果你想在你的代码中检查它,请确保在window属性中检查它

if (window.console)
console.log(msg)

这会在IE9中抛出一个异常,并且不能正常工作。不要这样做

if (console)
console.log(msg)

我知道这是一个非常古老的问题,但我认为这为如何处理主机问题提供了一个有价值的选择。在任何对控制台的调用之前放置以下代码。*(你的第一个剧本)。

// Avoid `console` errors in browsers that lack a console.
(function() {
var method;
var noop = function () {};
var methods = [
'assert', 'clear', 'count', 'debug', 'dir', 'dirxml', 'error',
'exception', 'group', 'groupCollapsed', 'groupEnd', 'info', 'log',
'markTimeline', 'profile', 'profileEnd', 'table', 'time', 'timeEnd',
'timeStamp', 'trace', 'warn'
];
var length = methods.length;
var console = (window.console = window.console || {});


while (length--) {
method = methods[length];


// Only stub undefined methods.
if (!console[method]) {
console[method] = noop;
}
}
}());
< p > 参考:
https://github.com/h5bp/html5-boilerplate/blob/v5.0.0/dist/js/plugins.js
< / p >
我想提一下,如果你在所有版本的Windows上关闭开发者工具使用console.log, IE9不会引发错误。XP系统有,但Windows 7系统没有。 所以如果你放弃了对WinXP的支持,你可以直接使用console.log