이 게시물 에 따르면 베타 버전이지만 릴리스되지 않았습니까?
답변
대체를 위해 더 나은 것은 이것입니다 :
var alertFallback = true;
if (typeof console === "undefined" || typeof console.log === "undefined") {
console = {};
if (alertFallback) {
console.log = function(msg) {
alert(msg);
};
} else {
console.log = function() {};
}
}
답변
console.log는 개발자 도구를 연 후에 만 사용할 수 있습니다 (F12를 열고 닫은 상태로 전환). 재밌는 것은 그것을 연 후에는 그것을 닫은 다음 console.log 호출을 통해 여전히 게시 할 수 있으며 다시 열면 볼 수 있다는 것입니다. 나는 그것이 일종의 버그라고 생각하고 수정 될 수 있지만, 우리는 볼 것입니다.
아마 다음과 같은 것을 사용할 것입니다.
function trace(s) {
if ('console' in self && 'log' in console) console.log(s)
// the line below you might want to comment out, so it dies silent
// but nice for seeing when the console is available or not.
else alert(s)
}
그리고 더 간단합니다 :
function trace(s) {
try { console.log(s) } catch (e) { alert(s) }
}
답변
이것은 다양한 답변을 취하는 것입니다. 해고되었을 때 IE 콘솔을 열지 않아도 실제로 기록 된 메시지를보고 싶었습니다. 그래서 내가 만든 console.messages
배열 로 밀어 넣습니다 . 또한 console.dump()
전체 로그를 쉽게 볼 수 있는 기능 을 추가했습니다 . console.clear()
메시지 대기열을 비 웁니다.
이 솔루션은 또한 다른 콘솔 방법을 “처리”합니다. Firebug Console API )
마지막으로이 솔루션은 IIFE 이므로 전체 범위를 오염시키지 않습니다. 폴백 함수 인수는 코드 하단에 정의되어 있습니다.
모든 페이지에 포함되어있는 마스터 JS 파일에 넣고 잊어 버립니다.
(function (fallback) {
fallback = fallback || function () { };
// function to trap most of the console functions from the FireBug Console API.
var trap = function () {
// create an Array from the arguments Object
var args = Array.prototype.slice.call(arguments);
// console.raw captures the raw args, without converting toString
console.raw.push(args);
var message = args.join(' ');
console.messages.push(message);
fallback(message);
};
// redefine console
if (typeof console === 'undefined') {
console = {
messages: [],
raw: [],
dump: function() { return console.messages.join('\n'); },
log: trap,
debug: trap,
info: trap,
warn: trap,
error: trap,
assert: trap,
clear: function() {
console.messages.length = 0;
console.raw.length = 0 ;
},
dir: trap,
dirxml: trap,
trace: trap,
group: trap,
groupCollapsed: trap,
groupEnd: trap,
time: trap,
timeEnd: trap,
timeStamp: trap,
profile: trap,
profileEnd: trap,
count: trap,
exception: trap,
table: trap
};
}
})(null); // to define a fallback function, replace null with the name of the function (ex: alert)
추가 정보
선 var args = Array.prototype.slice.call(arguments);
은 arguments
객체 에서 배열을 만듭니다 . 인수는 실제로 Array가 아니기 때문에 필수 입니다.
trap()
모든 API 함수의 기본 핸들러입니다. 나는 인수를 message
전달하여 API 호출에 전달 된 인수의 로그를 얻습니다 console.log
.
편집하다
에 console.raw
전달 된대로 정확하게 인수를 캡처 하는 추가 배열 을 추가 했습니다 trap()
. 때로는 바람직하지 않은 args.join(' ')
객체를 문자열로 변환하고 있음을 깨달았습니다 "[object Object]"
. 덕분에 bfontaine 에 대한 제안 .
답변
console.log
IE8에서는 진정한 자바 스크립트 기능이 아니라는 점에 주목할 가치가 있습니다. apply
또는 call
메소드를 지원하지 않습니다 .
답변
경고 할 폴백에 신경 쓰지 않는다고 가정하면 Internet Explorer의 단점을 해결하는 더 간결한 방법이 있습니다.
var console=console||{"log":function(){}};
답변
“orange80″에 의해 게시 된 접근 방식이 정말 마음에 듭니다. 한 번 설정하고 잊을 수 있기 때문에 우아합니다.
다른 접근 방식은 문제를 요구하는 다른 무언가를 수행해야합니다 ( console.log()
매번 평소 이외의 것을 호출하십시오 ).
로깅하기 전의 어느 위치에서나 자바 스크립트의 시작 부분에서 한 번만 호출 할 수있는 유틸리티 함수로 코드를 래핑하여 한 단계 더 발전했습니다. (저는 회사의 이벤트 데이터 라우터 제품에 이것을 설치하고 있습니다. 새로운 관리자 인터페이스의 브라우저 간 디자인을 단순화하는 데 도움이됩니다.)
/**
* Call once at beginning to ensure your app can safely call console.log() and
* console.dir(), even on browsers that don't support it. You may not get useful
* logging on those browers, but at least you won't generate errors.
*
* @param alertFallback - if 'true', all logs become alerts, if necessary.
* (not usually suitable for production)
*/
function fixConsole(alertFallback)
{
if (typeof console === "undefined")
{
console = {}; // define it if it doesn't exist already
}
if (typeof console.log === "undefined")
{
if (alertFallback) { console.log = function(msg) { alert(msg); }; }
else { console.log = function() {}; }
}
if (typeof console.dir === "undefined")
{
if (alertFallback)
{
// THIS COULD BE IMPROVED… maybe list all the object properties?
console.dir = function(obj) { alert("DIR: "+obj); };
}
else { console.dir = function() {}; }
}
}
답변
모든 console.log 호출에 “정의되지 않음”이 표시되면 오래된 firebuglite (firebug.js)가 여전히로드되어 있음을 의미합니다. IE8의 console.log의 모든 유효한 기능이 존재하더라도이를 무시합니다. 이것은 어쨌든 나에게 일어난 일입니다.
콘솔 객체를 재정의하는 다른 코드를 확인하십시오.