[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 Tools
IE8 열고 또한 당신이 사용할 수에 Console
스크립트 탭에서 텍스트 상자를.
답변
if (typeof console == "undefined") {
this.console = {
log: function() {},
info: function() {},
error: function() {},
warn: function() {}
};
}