[javascript] Internet Explorer에서 ‘console’은 정의되지 않은 오류입니다.

Firebug를 사용하고 있으며 다음과 같은 문장이 있습니다.

console.log("...");

내 페이지에서. IE8 (아마도 이전 버전)에서도 ‘console’이 정의되지 않았다는 스크립트 오류가 발생합니다. 내 페이지 맨 위에 이것을 넣으려고했습니다.

<script type="text/javascript">
    if (!console) console = {log: function() {}};
</script>

여전히 오류가 발생합니다. 오류를 제거하는 방법이 있습니까?



답변

시험

if (!window.console) console = ...

정의되지 않은 변수는 직접 참조 할 수 없습니다. 그러나 모든 전역 변수는 window브라우저의 경우 전역 컨텍스트와 동일한 이름의 속성이므로 정의되지 않은 속성에 액세스하는 것이 좋습니다.

또는 if (typeof console === 'undefined') console = ...매직 변수를 피하려면 @Tim Down의 답변을window 참조하십시오 .


답변

콘솔을 사용하기 전에 JavaScript 맨 위에 다음을 붙여 넣습니다.

/**
 * Protect window.console method calls, e.g. console is not defined on IE
 * unless dev tools are open, and IE doesn't define console.debug
 *
 * Chrome 41.0.2272.118: debug,error,info,log,warn,dir,dirxml,table,trace,assert,count,markTimeline,profile,profileEnd,time,timeEnd,timeStamp,timeline,timelineEnd,group,groupCollapsed,groupEnd,clear
 * Firefox 37.0.1: log,info,warn,error,exception,debug,table,trace,dir,group,groupCollapsed,groupEnd,time,timeEnd,profile,profileEnd,assert,count
 * Internet Explorer 11: select,log,info,warn,error,debug,assert,time,timeEnd,timeStamp,group,groupCollapsed,groupEnd,trace,clear,dir,dirxml,count,countReset,cd
 * Safari 6.2.4: debug,error,log,info,warn,clear,dir,dirxml,table,trace,assert,count,profile,profileEnd,time,timeEnd,timeStamp,group,groupCollapsed,groupEnd
 * Opera 28.0.1750.48: debug,error,info,log,warn,dir,dirxml,table,trace,assert,count,markTimeline,profile,profileEnd,time,timeEnd,timeStamp,timeline,timelineEnd,group,groupCollapsed,groupEnd,clear
 */
(function() {
  // Union of Chrome, Firefox, IE, Opera, and Safari console methods
  var methods = ["assert", "cd", "clear", "count", "countReset",
    "debug", "dir", "dirxml", "error", "exception", "group", "groupCollapsed",
    "groupEnd", "info", "log", "markTimeline", "profile", "profileEnd",
    "select", "table", "time", "timeEnd", "timeStamp", "timeline",
    "timelineEnd", "trace", "warn"];
  var length = methods.length;
  var console = (window.console = window.console || {});
  var method;
  var noop = function() {};
  while (length--) {
    method = methods[length];
    // define undefined methods as noops to prevent errors
    if (!console[method])
      console[method] = noop;
  }
})();

함수 클로저 래퍼는 변수를 정의하지 않도록 변수의 범위를 지정하는 것입니다. 이것은 정의되지 않은 메소드 console와 정의되지 않은 console.debug메소드 및 기타 누락 된 메소드를 방지합니다.

편집 : HTML5 보일러 플레이트 는 js / plugins.js 파일에서 비슷한 코드를 사용 한다는 것을 알았 습니다. 아마도 최신 상태로 유지되는 솔루션을 찾고 있다면.


답변

다른 대안은 typeof연산자입니다.

if (typeof console == "undefined") {
    this.console = {log: function() {}};
}

또 다른 대안은 내 자신의 log4javascript 와 같은 로깅 라이브러리를 사용하는 것 입니다.


답변

보다 강력한 솔루션을 위해 다음 코드를 사용하십시오 (twitter의 소스 코드에서 가져옴).

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


답변

내 스크립트에서 나는 속기를 사용합니다.

window.console && console.log(...) // only log if the function exists

또는 모든 console.log 행을 편집 할 수 없거나 실행 가능하지 않은 경우 가짜 콘솔을 만듭니다.

// check to see if console exists. If not, create an empty object for it,
// then create and empty logging function which does nothing. 
//
// REMEMBER: put this before any other console.log calls
!window.console && (window.console = {} && window.console.log = function () {});


답변

당신이 사용할 수있는 console.log()당신이있는 경우에 Developer ToolsIE8 열고 또한 당신이 사용할 수에 Console스크립트 탭에서 텍스트 상자를.


답변

if (typeof console == "undefined") {
  this.console = {
    log: function() {},
    info: function() {},
    error: function() {},
    warn: function() {}
  };
}