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

2020/10/15 14:41 · javascript ·  · 0评论

window.console.logInternet Explorer 9在什么情况下定义?

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

[有关IE8的问题:IE8中console.log发生了什么?。]

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

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

对于它的价值,您仍然可以Function.prototypeconsole带有一点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并正常执行。

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

// 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);
        }
    }
}

我想提到的是,如果您在所有版本的Windows上都关闭了开发人员工具的情况下使用console.log,则IE9不会引发错误。在XP上可以,但是在Windows 7上不能。因此,如果您一般放弃了对WinXP的支持,则可以直接使用console.log。

怎么样...

console = { log : function(text) { alert(text); } }
本文地址:http://javascript.askforanswer.com/ie9shifouzhichiconsole-logtashizhenzhengdegongnengma.html
文章标签: ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!