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

在哪些情况下是在Internet Explorer 9中定义的window.console.log

即使window.console.log定义, window.console.log.applywindow.console.log.call是不确定的。 为什么是这样?

[IE8的相关问题:IE8中console.log发生了什么变化?]


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

console对象不是任何标准的一部分,并且是文档对象模型的扩展。 像其他DOM对象一样,它被认为是一个宿主对象,不需要从Object继承,也不需要从Function继承它的方法,就像本地ECMAScript函数和对象一样。 这是在这些方法中applycall未定义的原因。 在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

链接地址: http://www.djcxy.com/p/18031.html

上一篇: Does IE9 support console.log, and is it a real function?

下一篇: each loop, or an iterator?