IE9是否支持console.log,是不是真的有功能?

IT技术 javascript logging internet-explorer-9
2021-01-27 01:31:05

window.console.logInternet Explorer 9 中定义了哪些情况

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

【IE8相关问题:IE8中的console.log是怎么回事?.]

6个回答

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

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

对于它的value,您仍然可以在Function.prototype方法上使用一些console具有一点bind()魔力的方法

var log = Function.prototype.bind.call(console.log, console);
log.apply(console, ["this", "is", "a", "test"]);
//-> "thisisatest"
您应该在第一次在 IE @f055 上遇到问题时检查错误日志
2021-03-14 01:31:05
Internet 选项 -> 高级 -> 显示有关每个脚本错误的通知。Web 开发人员应始终在 IE 中选中此项。这会告诉您有关控制台的信息,或者未定义日志功能...无法准确记住该消息。
2021-03-14 01:31:05
昨天有同样的问题。安装DebugBar碰巧帮助我更快,因为它没有定义控制台对象。因此,当我隐藏 IE 控制台而不是 DebugBar 时,我从后者收到一条消息,指出存在 JavaScript 错误(未定义控制台)。
2021-03-31 01:31:05
Firebug 的console对象也是如此
2021-04-01 01:31:05
我可以不自豪地说,多年来我为 Web 开发时,我认为所有主要浏览器都支持 console.log。我刚刚花了一天时间弄清楚为什么 IE9 不喜欢我的脚本,现在我知道为什么 - 它在第一步中有一个 console.log。无法调试,因为打开调试模式使此错误立即消失:P 感谢您的澄清!!
2021-04-09 01:31:05

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

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

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

@ZachL:具体是哪些?
2021-03-28 01:31:05
2021-04-08 01:31:05
更多信息和更强大的控制台替换(包括其他控制台方法)在这里:stackoverflow.com/questions/8002116/...
2021-04-10 01:31:05

我知道这是一个非常古老的问题,但我觉得这为如何处理控制台问题增加了一个有value的替代方案。在对 console.* 的任何调用之前放置以下代码(这是您的第一个脚本)。

// 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

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

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

这会在 IE9 中引发异常并且无法正常工作。不要这样做

if (console) 
    console.log(msg)

在阅读了上面 Marc Cliament 评论中的文章后,我现在将我的通用跨浏览器 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);
        }
    }
}
@Victor它绝对应该是唯一一个被接受的答案!
2021-03-19 01:31:05
只是 Function.prototype.apply.call(console.log, console, arguments);
2021-04-10 01:31:05