Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript IE9支持console.log吗?它是真正的功能吗?_Javascript_Logging_Internet Explorer 9 - Fatal编程技术网

Javascript IE9支持console.log吗?它是真正的功能吗?

Javascript IE9支持console.log吗?它是真正的功能吗?,javascript,logging,internet-explorer-9,Javascript,Logging,Internet Explorer 9,Internet Explorer 9在哪些情况下定义了window.console.log 即使定义了window.console.log,也未定义window.console.log.apply和window.console.log.call。为什么会这样 [IE8的相关问题:.]在Internet Explorer 9(和8)中,控制台对象仅在为特定选项卡打开开发人员工具时才会显示。如果隐藏该选项卡的“开发人员工具”窗口,则对于导航到的每个页面,控制台对象都将保持暴露状态。如果打开新选项卡

Internet Explorer 9在哪些情况下定义了
window.console.log

即使定义了
window.console.log
,也未定义
window.console.log.apply
window.console.log.call
。为什么会这样

[IE8的相关问题:.]

在Internet Explorer 9(和8)中,
控制台
对象仅在为特定选项卡打开开发人员工具时才会显示。如果隐藏该选项卡的“开发人员工具”窗口,则对于导航到的每个页面,
控制台
对象都将保持暴露状态。如果打开新选项卡,还必须打开该选项卡的开发人员工具,以便显示
控制台
对象

控制台
对象不是任何标准的一部分,是文档对象模型的扩展。与其他DOM对象一样,它被视为主机对象,不需要像本机ECMAScript函数和对象那样从
对象
继承,也不需要从
函数
继承其方法。这就是在这些方法中未定义
apply
call
的原因。在IE9中,大多数DOM对象都经过了改进,从本地ECMAScript类型继承。由于开发人员工具被认为是IE的扩展(尽管是内置的扩展),它们显然没有得到与DOM其余部分相同的改进

不管它值多少钱,您仍然可以使用一些
函数。使用
控制台上的原型
方法
方法有点神奇:


这个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 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);
        }
    }
}

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

if (window.console)
    console.log(msg)
这会在IE9中引发异常,无法正常工作。不要这样做

if (console) 
    console.log(msg)

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

参考:


我想指出,如果在所有版本的Windows上使用console.log并关闭开发人员工具,IE9不会引发错误。在XP上是这样,但在Windows7上不是这样。
因此,如果您总体上放弃了对WinXP的支持,那么直接使用console.log就可以了。

Firebug的
console
对象也是如此。我可以自豪地说,在我为web开发的多年中,我一直认为console.log受到所有主要浏览器的支持。我花了一天的时间研究IE9为什么不喜欢我的脚本,现在我知道了原因——它在第一步就有一个console.log。无法调试,因为打开调试模式会使此错误在瞬间消失:P感谢您的澄清!!昨天也有同样的问题。由于没有定义console对象,因此安装帮助我更快地完成。因此,当我隐藏IE控制台而不是调试栏时,我从后者那里得到一条消息,表示存在JavaScript错误(控制台未定义)。在IE@f055Internet Options->Advanced->显示关于每个脚本错误的通知时,您应该在第一次遇到问题时检查错误日志。Web开发人员应该始终将此签入IE。这会通知您有关控制台的信息,或者日志函数未定义。。。我记不清确切的信息了。请查看这篇关于IE8-9控制台对象/功能复杂性的文章:另请参见@MarcCliment链接dead@chakeda我讨厌当这种情况发生时,有来自web存档的链接:更多信息和更健壮的控制台替换(包括其他控制台方法)这里:@ZachL:具体是哪一个?我的答案有一个方法:。还要检查一下:Just
Function.prototype.apply.call(console.log、console、arguments)@Victor这肯定是唯一被接受的答案!在某些情况下,这可能是一个可行的解决方法,但实际上您还没有解决这个问题。
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;
        }
    }
}());