Internet Explorer에 대해 'console'이 정의되지 않은 오류입니다.
Firebug를 사용하고 있는데 다음과 같은 문장이 있습니다.
console.log("...");
내 페이지에 있습니다.IE8(아마도 이전 버전)에서는 'console'이 정의되어 있지 않다고 하는 스크립트 오류가 발생합니다.페이지 맨 위에 표시해 보았습니다.
<script type="text/javascript">
if (!console) console = {log: function() {}};
</script>
여전히 오류가 납니다.오류를 제거할 수 있는 방법이 있습니까?
해라
if (!window.console) console = ...
정의되지 않은 변수는 직접 참조할 수 없습니다. 모든 입니다(「」, 「Atribute」).window
아트리뷰트라고 합니다.
「」를 사용합니다.if (typeof console === 'undefined') console = ...
window
@Tim Down의 답변을 참조하십시오.
콘솔을 사용하기 전에 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 Boilplate는 js/plugins.js 파일에 유사한 코드를 사용하고 있다는 것을 알게 되었습니다.만약 최신 상태로 유지되는 솔루션을 찾고 있다면 말이죠.
다른 은 '보다 낫다'입니다.typeof
★★★★★★★★★★★★★★★★★★:
if (typeof console == "undefined") {
this.console = {log: function() {}};
}
또 다른 방법은 로그 라이브러리를 사용하는 것입니다.예를 들어 log4javascript와 같은 것입니다.
보다 견고한 솔루션을 이용하려면 , 다음의 코드(트위터의 소스 코드로부터 취득)를 사용해 주세요.
// 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() {}
};
}
지금까지의 2개의 회답에 근거하고 있습니다.
및 문서
- Internet Explorer (IE 10)
- Safari (2012.07.23)
- 파이어폭스(2013.05.20)
- 크롬(2013.01. 25.) 및 크롬(2012. 10. 04)입니다.
- 그리고 내 지식 중 일부는
이 문제에 대한 베스트 에포트 실장은 다음과 같습니다.즉, 실제로 console.log가 존재하는 경우 console.log를 통해 존재하지 않는 메서드의 공백을 메웁니다.
예를 들어 IE6/7의 경우 로깅을 경보로 대체하고(무디지만 작동) 다음 몬스터(console.js라고 불렀습니다)를 포함할 수 있습니다.[필요에 따라 코멘트를 삭제해도 됩니다.참고를 위해 남겨두었습니다.미니마이저로 해결할 수 있습니다]
<!--[if lte IE 7]>
<SCRIPT LANGUAGE="javascript">
(window.console = window.console || {}).log = function() { return window.alert.apply(window, arguments); };
</SCRIPT>
<![endif]-->
<script type="text/javascript" src="console.js"></script>
및 console.display:
/**
* 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
*/
(function() {
var console = (window.console = window.console || {});
var noop = function () {};
var log = console.log || noop;
var start = function(name) { return function(param) { log("Start " + name + ": " + param); } };
var end = function(name) { return function(param) { log("End " + name + ": " + param); } };
var methods = {
// Internet Explorer (IE 10): http://msdn.microsoft.com/en-us/library/ie/hh772169(v=vs.85).aspx#methods
// assert(test, message, optionalParams), clear(), count(countTitle), debug(message, optionalParams), dir(value, optionalParams), dirxml(value), error(message, optionalParams), group(groupTitle), groupCollapsed(groupTitle), groupEnd([groupTitle]), info(message, optionalParams), log(message, optionalParams), msIsIndependentlyComposed(oElementNode), profile(reportName), profileEnd(), time(timerName), timeEnd(timerName), trace(), warn(message, optionalParams)
// "assert", "clear", "count", "debug", "dir", "dirxml", "error", "group", "groupCollapsed", "groupEnd", "info", "log", "msIsIndependentlyComposed", "profile", "profileEnd", "time", "timeEnd", "trace", "warn"
// Safari (2012. 07. 23.): https://developer.apple.com/library/safari/#documentation/AppleApplications/Conceptual/Safari_Developer_Guide/DebuggingYourWebsite/DebuggingYourWebsite.html#//apple_ref/doc/uid/TP40007874-CH8-SW20
// assert(expression, message-object), count([title]), debug([message-object]), dir(object), dirxml(node), error(message-object), group(message-object), groupEnd(), info(message-object), log(message-object), profile([title]), profileEnd([title]), time(name), markTimeline("string"), trace(), warn(message-object)
// "assert", "count", "debug", "dir", "dirxml", "error", "group", "groupEnd", "info", "log", "profile", "profileEnd", "time", "markTimeline", "trace", "warn"
// Firefox (2013. 05. 20.): https://developer.mozilla.org/en-US/docs/Web/API/console
// debug(obj1 [, obj2, ..., objN]), debug(msg [, subst1, ..., substN]), dir(object), error(obj1 [, obj2, ..., objN]), error(msg [, subst1, ..., substN]), group(), groupCollapsed(), groupEnd(), info(obj1 [, obj2, ..., objN]), info(msg [, subst1, ..., substN]), log(obj1 [, obj2, ..., objN]), log(msg [, subst1, ..., substN]), time(timerName), timeEnd(timerName), trace(), warn(obj1 [, obj2, ..., objN]), warn(msg [, subst1, ..., substN])
// "debug", "dir", "error", "group", "groupCollapsed", "groupEnd", "info", "log", "time", "timeEnd", "trace", "warn"
// Chrome (2013. 01. 25.): https://developers.google.com/chrome-developer-tools/docs/console-api
// assert(expression, object), clear(), count(label), debug(object [, object, ...]), dir(object), dirxml(object), error(object [, object, ...]), group(object[, object, ...]), groupCollapsed(object[, object, ...]), groupEnd(), info(object [, object, ...]), log(object [, object, ...]), profile([label]), profileEnd(), time(label), timeEnd(label), timeStamp([label]), trace(), warn(object [, object, ...])
// "assert", "clear", "count", "debug", "dir", "dirxml", "error", "group", "groupCollapsed", "groupEnd", "info", "log", "profile", "profileEnd", "time", "timeEnd", "timeStamp", "trace", "warn"
// Chrome (2012. 10. 04.): https://developers.google.com/web-toolkit/speedtracer/logging-api
// markTimeline(String)
// "markTimeline"
assert: noop, clear: noop, trace: noop, count: noop, timeStamp: noop, msIsIndependentlyComposed: noop,
debug: log, info: log, log: log, warn: log, error: log,
dir: log, dirxml: log, markTimeline: log,
group: start('group'), groupCollapsed: start('groupCollapsed'), groupEnd: end('group'),
profile: start('profile'), profileEnd: end('profile'),
time: start('time'), timeEnd: end('time')
};
for (var method in methods) {
if ( methods.hasOwnProperty(method) && !(method in console) ) { // define undefined methods as best-effort methods
console[method] = methods[method];
}
}
})();
IE9에서 콘솔이 열리지 않으면 다음 코드가 표시됩니다.
alert(typeof console);
이 코드는 "object"로 표시됩니다만,
alert(typeof console.log);
TypeError 예외는 발생하지만 정의되지 않은 값은 반환하지 않습니다.
따라서 코드 보증 버전은 다음과 같습니다.
try {
if (window.console && window.console.log) {
my_console_log = window.console.log;
}
} catch (e) {
my_console_log = function() {};
}
코드에서 console.log만 사용하고 있습니다.그래서 나는 매우 짧은 2개의 라이너를 포함합니다.
var console = console || {};
console.log = console.log || function(){};
OP가 IE와 함께 Firebug를 사용하고 있다는 것을 알게 되었으므로 Firebug Lite라고 가정합니다.이것은 디버거 창을 열면 IE에서 콘솔이 정의되기 때문에 펑키한 상황입니다만, Firebug가 이미 실행되고 있으면 어떻게 됩니까?확실하지는 않지만, 이 상황에서 "firebugx.js" 메서드를 테스트하는 것이 좋습니다.
출처:
https://code.google.com/p/fbug/source/browse/branches/firebug1.2/lite/firebugx.js?r=187
if (!window.console || !console.firebug) {
var names = [
"log", "debug", "info", "warn", "error", "assert",
"dir","dirxml","group","groupEnd","time","timeEnd",
"count","trace","profile","profileEnd"
];
window.console = {};
for (var i = 0; i < names.length; ++i)
window.console[names[i]] = function() {}
}
(2014년 12월 링크 포함)
TypeScript 콘솔 스터브:
if (!window.console) {
console = {
assert: () => undefined,
clear: () => undefined,
count: () => undefined,
debug: () => undefined,
dir: () => undefined,
dirxml: () => undefined,
error: () => undefined,
group: () => undefined,
groupCollapsed: () => undefined,
groupEnd: () => undefined,
info: () => undefined,
log: () => undefined,
msIsIndependentlyComposed: (e: Element) => false,
profile: () => undefined,
profileEnd: () => undefined,
select: () => undefined,
time: () => undefined,
timeEnd: () => undefined,
trace: () => undefined,
warn: () => undefined,
}
};
저는 fauxconsole을 사용하고 있습니다.css를 조금 수정해서 보기 좋으면서도 잘 작동하도록 했습니다.
IE에서의 디버깅에 대해서는, 이 log4javascript 를 참조해 주세요.
console.log(디버깅, 트레이스 없음 등)로 제한된 IE8 또는 콘솔 지원에 대해서는 다음을 수행할 수 있습니다.
console OR console.log가 정의되지 않은 경우: 콘솔 기능(trace, debug, log, ...)의 더미 함수를 만듭니다.
window.console = { debug : function() {}, ...};
그렇지 않으면 console.log가 정의되어 있고(IE8) console.debug(기타)가 정의되어 있지 않은 경우: 모든 로깅 기능을 console.log로 리다이렉트하면 로그가 유지됩니다.
window.console = { debug : window.console.log, ...};
다양한 IE 버전에서의 아사트 지원에 대해서는 확실하지 않지만, 어떠한 제안도 환영합니다.또, 다음의 회답도 게재했습니다.Internet Explorer에서 콘솔로깅을 사용하려면 어떻게 해야 하나요?
console = console || {
debug: function(){},
log: function(){}
...
}
아래를 사용하여 모든 기본이 보장된 추가 수준의 보험을 들 수 있습니다.「」를 사용합니다.typeof
undefined
하다, 사용하다, 사용하다.===
, 이 실제로는 「snowled 「snowledge」, 「snowledge」가.시그니처에 는 이 기능을 선택했습니다).logMsg
콘솔로 출력하는 모든 것을 로그 기능에 전달하기 때문에 일관성을 유지할 수 있습니다.이것에 의해, 인텔리센스의 정확성을 유지할 수 있어 JS 인식 IDE 의 경고나 에러가 발생하지 않게 됩니다.
if(!window.console || typeof console === "undefined") {
var console = { log: function (logMsg) { } };
}
IE8/9에서는 콘솔이 동작하지만, 그 이외의 경우에는 동작하지 않을 수 있습니다.이 불규칙한 동작은 개발자 도구가 열려 있는지 여부에 따라 달라지며 stackoverflow 질문에 설명되어 있습니다.IE9은 console.log를 지원합니까?또한 실제 기능입니까?
IE9의 하위 창에서 console.log를 실행하는 동안 window.open 함수에 의해 생성된 유사한 문제가 발생했습니다.
이 경우 콘솔은 상위 창에서만 정의되며 새로 고칠 때까지 하위 창에서는 정의되지 않습니다.하위 창의 자녀에게도 동일하게 적용됩니다.
다음 기능으로 로그인을 래핑하여 대응합니다(아래는 모듈의 fragment입니다).
getConsole: function()
{
if (typeof console !== 'undefined') return console;
var searchDepthMax = 5,
searchDepth = 0,
context = window.opener;
while (!!context && searchDepth < searchDepthMax)
{
if (typeof context.console !== 'undefined') return context.console;
context = context.opener;
searchDepth++;
}
return null;
},
log: function(message){
var _console = this.getConsole();
if (!!_console) _console.log(message);
}
많은 문제가 발생한 후 (개발자 콘솔을 열면 오류가 발생하지 않기 때문에 오류를 디버깅하기가 어렵습니다.)다시는 이 일에 신경 쓰지 않기 위해 과잉 살상 코드를 만들기로 결심했어요
if (typeof window.console === "undefined")
window.console = {};
if (typeof window.console.debug === "undefined")
window.console.debug= function() {};
if (typeof window.console.log === "undefined")
window.console.log= function() {};
if (typeof window.console.error === "undefined")
window.console.error= function() {alert("error");};
if (typeof window.console.time === "undefined")
window.console.time= function() {};
if (typeof window.console.trace === "undefined")
window.console.trace= function() {};
if (typeof window.console.info === "undefined")
window.console.info= function() {};
if (typeof window.console.timeEnd === "undefined")
window.console.timeEnd= function() {};
if (typeof window.console.group === "undefined")
window.console.group= function() {};
if (typeof window.console.groupEnd === "undefined")
window.console.groupEnd= function() {};
if (typeof window.console.groupCollapsed === "undefined")
window.console.groupCollapsed= function() {};
if (typeof window.console.dir === "undefined")
window.console.dir= function() {};
if (typeof window.console.warn === "undefined")
window.console.warn= function() {};
Personaly 저는 console.log와 console.error만 사용하지만 이 코드는 Mozila Developer Network(https://developer.mozilla.org/en-US/docs/Web/API/console)에 표시된 다른 모든 기능을 처리합니다.이 코드를 페이지 상단에 표시하기만 하면 당신은 영원히 끝납니다.
console.log(...)는 Firefox에서 직접 사용할 수 있지만 IE에서는 사용할 수 없습니다.IE에서는 window.console을 사용해야 합니다.
언급URL : https://stackoverflow.com/questions/3326650/console-is-undefined-error-for-internet-explorer
'programing' 카테고리의 다른 글
경고/오류 "함수 선언은 프로토타입이 아닙니다" (0) | 2023.01.13 |
---|---|
개체의 첫 번째 인덱스 가져오기 (0) | 2023.01.13 |
MySQL: int 필드의 값을 전환하는 간단한 방법 (0) | 2023.01.13 |
개체 배열을 여러 필드로 정렬하려면 어떻게 해야 합니까? (0) | 2023.01.13 |
MySQL Workbench에서 Mariadb(Centos 7)에 액세스할 수 없음 (0) | 2023.01.13 |