IE9是否支持console.log,它是一个真正的功能?
在哪些情况下是在Internet Explorer 9中定义的window.console.log
?
即使window.console.log
定义, window.console.log.apply
和window.console.log.call
是不确定的。 为什么是这样?
[IE8的相关问题:IE8中console.log发生了什么变化?]
在Internet Explorer 9(和8)中, console
对象仅在为特定选项卡打开开发人员工具时才公开。 如果您隐藏该选项卡的开发人员工具窗口,则console
对象将保持显示您导航到的每个页面。 如果您打开一个新选项卡,则还必须打开该选项卡的开发人员工具才能公开console
对象。
console
对象不是任何标准的一部分,并且是文档对象模型的扩展。 像其他DOM对象一样,它被认为是一个宿主对象,不需要从Object
继承,也不需要从Function
继承它的方法,就像本地ECMAScript函数和对象一样。 这是在这些方法中apply
和call
未定义的原因。 在IE 9中,大多数DOM对象都得到了改进,可以从本机ECMAScript类型继承。 由于开发人员工具被认为是IE的扩展(虽然是内置扩展),但他们显然没有得到与DOM其余部分相同的改进。
对于它的价值,你仍然可以在console
方法上用一些bind()
magic来使用一些Function.prototype
方法:
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并正常执行。
我知道这是一个非常古老的问题,但是感觉这增加了如何处理控制台问题的有价值的选择。 在调用控制台之前放置以下代码*(这是您的第一个脚本)。
// 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;
}
}
}());
参考:
https://github.com/h5bp/html5-boilerplate/blob/v5.0.0/dist/js/plugins.js
上一篇: Does IE9 support console.log, and is it a real function?