programing

IE9은 console.log를 지원합니까?실제 기능입니까?

shortcode 2023. 1. 28. 09:40
반응형

IE9은 console.log를 지원합니까?실제 기능입니까?

어떤 상황에서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오브젝트는 표준의 일부가 아니며 Document Object Model의 확장입니다.다른 DOM 개체와 마찬가지로 호스트 개체로 간주되므로 상속할 필요가 없습니다.Object, 그 메서드도 없습니다.Function네이티브 ECMAScript 함수나 오브젝트처럼요.이게 이유야apply그리고.call이러한 메서드에 정의되어 있지 않습니다.IE 9에서는 대부분의 DOM 개체가 네이티브 ECMAScript 유형에서 상속되도록 개선되었습니다.개발자 툴은 IE의 확장으로 간주되기 때문에(내장 확장이지만) DOM의 다른 부분과 같은 개선은 이루어지지 않았습니다.

중요한 건, 넌 아직 좀 쓸 수 있어Function.prototype에 대한 방법console약간의 마법이 있는 방법:

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는 콘솔이 열려 있을 때만 정의됩니다.코드로 체크하려면 윈도 속성 내에서 체크해야 합니다.

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

언급URL : https://stackoverflow.com/questions/5472938/does-ie9-support-console-log-and-is-it-a-real-function

반응형