[javascript] IE9는 console.log를 지원하며 실제 기능입니까?

어떤 상황 window.console.log에서 Internet 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. 이것이 이유 apply이며 call해당 방법에 대해서는 정의되어 있지 않습니다. IE 9에서는 대부분의 DOM 객체가 기본 ECMAScript 유형에서 상속되도록 개선되었습니다. 개발자 도구는 IE의 확장 기능 (내장 확장 기능 임)으로 간주되므로 나머지 DOM과 동일한 개선 사항을받지 못했습니다.

가치있는 것을 위해 , 약간의 마술로 Function.prototype메소드에 몇 가지 메소드를 계속 사용할 수 있습니다 .consolebind()

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 메소드가 정의되고 정상적으로 실행됩니다.


답변

나는 이것이 매우 오래된 질문이라는 것을 알고 있지만 이것이 콘솔 문제를 다루는 방법에 대한 귀중한 대안을 추가한다고 생각합니다. 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);
        }
    }
}


답변

모든 버전의 Windows에서 개발자 도구를 닫은 상태에서 console.log를 사용하면 IE9에서 오류가 발생하지 않습니다. XP에서는 그렇지 않지만 Windows 7에서는 그렇지 않습니다. 따라서 일반적으로 WinXP에 대한 지원을 중단 한 경우 console.log를 직접 사용하는 것이 좋습니다.


답변

어때요?

console = { log : function(text) { alert(text); } }