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


209

어떤 상황 window.console.log에서 Internet Explorer 9에 정의되어 있습니까?

window.console.log정의 window.console.log.apply되어 window.console.log.call있고 정의되지 않은 경우에도 마찬가지입니다. 왜 이런거야?

[IE8 관련 질문 : IE8 에서 console.log는 어떻게 되었습니까? .]


3
IE8-9 콘솔 객체 / 기능의 복잡성에 대한이 훌륭한 게시물을 확인하십시오 : whattheheadsaid.com/2011/04/…
Marc Climent


@MarcCliment 링크가 죽었습니다
chakeda

@chakeda 이것이 일어날 때 나는 싫어, 웹 아카이브에서 링크가 있습니다 : web.archive.org/web/20140625085155/http://whattheheadsaid.com/…
Marc Climent

답변:


299

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"

2
Firebug의 console객체도 마찬가지입니다 .
Marcel Korpel

150
나는 웹을 위해 개발 한 수년 동안 모든 주요 브라우저가 console.log를 지원한다고 가정했다. 나는 IE9가 왜 내 스크립트를 좋아하지 않는지 알아내는 데 하루를 보냈으며 이제는 왜 첫 단계에 console.log가 있는지 알고 있습니다. 디버그 모드를 돌리면이 버그가 즉시 사라지게되므로 디버그가 불가능합니다. : P 감사합니다 !!
f055

2
어제 같은 문제가 있었다. 콘솔 객체를 정의하지 않기 때문에 DebugBar를 설치하면 더 빨리 도움이되었습니다. 그래서 IE 콘솔을 숨기고 DebugBar는 숨길 때 JavaScript 오류가 발생했다는 메시지가 나타납니다 (콘솔이 정의되지 않았습니다).
Simon A. Eugster

문제가 IE @ f055에서 처음 왔을 때 오류 로그를 확인해야합니다.
Lucky Ali

7
인터넷 옵션-> 고급-> 모든 스크립트 오류에 대한 알림을 표시합니다. 웹 개발자는 항상 이것을 IE에 체크 표시해야합니다. 콘솔에 대한 정보가 있거나 로그 함수가 정의되지 않았습니다 ... 메시지를 정확하게 기억할 수 없습니다.
세스 꽃

166

이 console.log 문제에 대한 간단한 해결책은 JS 코드의 시작 부분에 다음을 정의하는 것입니다.

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

이것은 모든 브라우저에서 작동합니다. 디버거가 활성화되지 않은 경우 console.log에 대한 더미 함수가 작성됩니다. 디버거가 활성화되면 console.log 메소드가 정의되고 정상적으로 실행됩니다.


8
더 많은 정보와보다 강력한 콘솔 교체 (다른 콘솔 방법 포함) : stackoverflow.com/questions/8002116/…
Zach Lysobey

@ ZachL : 콘크리트에 정확히 어느 것이 있습니까?
hakre

내 대답에는 stackoverflow.com/a/15771110/363701 한 가지 접근 방식이 있습니다. 또한이 체크 아웃 : github.com/paulmillr/console-polyfill/blob/master/index.js
자크 Lysobey

13

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


10

console.log는 콘솔이 열려있을 때만 정의됩니다. 코드에서 확인하려면 window 속성 내에서 확인하십시오.

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

IE9에서 예외가 발생하고 제대로 작동하지 않습니다. 이러지마

if (console) 
    console.log(msg)

6

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

1
그냥Function.prototype.apply.call(console.log, console, arguments);
빅터

@ 빅터 그것은 분명히 유일한 대답이어야합니다!
Pavel Frankov

0

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


-1

어때요?

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

1
경우에 따라 해결 방법이 될 수도 있지만 실제로 문제를 해결하지는 못했습니다.
pswg
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.