2011-08-26 4 views
0

어딘가에 Stackoverflow 어딘가에 대해 console.log() 어딘가에 읽었습니다. 그리고 나는 IE가 버그를 일으키는 것을 읽은 것을 기억합니다. 사용자는 배포하기 전에 코드의 모든 인스턴스를 코드에서 제거해야한다고 말했거나 javacript 라이브러리을 사용하여 IE에서이 인스턴스를 생략 할 수 있습니다.생략하거나 수정/내장 된 javascript 호환성을 위해

제 질문은이 두 번째 옵션에 관한 것입니다. 어떻게 이러한 라이브러리를 작성합니까? js가 앞으로 어떻게 해석되는지에 영향을 미치는 것은 onload 인 것일까요? if browser == IE, omit all instances of console.log() ...라고 쓰여 있거나 ... console.log() 메소드의 확장일까요? 그러면 브라우저에서 호출되는 브라우저를 스스로 인식하게됩니까? jQuery 함수를 확장하는 것에 다소 익숙하지만, 원시 js를 사용한 적이 없다. 나는 일반적으로 브라우저 상호 호환성을 달성하는 좋은 방법이라고 생각하기 때문에 이것에 흥미가있다. 이것은 구체적으로 console.log()에 관한 것이 아니다.

답변

1

존재할 수도 있고 없을 수도있는 전역 속성에 대한 테스트 방법에는 몇 가지가 있습니다. 최대한 방어적인 태도로 시도해야합니다. 테스트에서

var global = this; 

if (!('console' in global)) { 
    global.console = {}; 
} 

if (!('log' in global.console)) { 
    global.console.log = /* whatever */; 
} 

아마도 대신 대해서 typeof 를 사용할 수 있습니다. 아이디어는 존재하지 않을 수있는 식별자를 사용하지 않는 것입니다. 아마도 약간의 saner가 있습니다 :

+0

알 수 있습니다. 이렇게하면 미리 기지를 커버 할 수 있습니다. 문제가 발생하면 '정의되지 않은'문제를 동적으로 처리하는 방법에 대해 알고 있습니까? 역동적으로? 나는 그런 해결책이 가치 있다고 생각하지만 그것을하는 방법을 생각할 수 없다. –

3

한 가지 방법은 걱정하지 않고 항상 사용할 수 있도록 console.log()이 항상 정의되어 있는지 확인하는 것입니다. 이 코드를 추가하여 항상 정의되어 있는지 확인할 수 있습니다.

이 코드는 IE (또는 브라우저가없는 다른 브라우저)에서 console.log()이 정의되고 안전하게 수행 할 수 있도록합니다. 그것이 이미 존재할 때,이 코드는 앞의 정의 console.log()을 제자리에두고 그대로 둡니다.

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

호스트 속성에 액세스하는 가장 안전한 방법은 'if (! ('console 'in window)) {...}'같은 * in * 테스트입니다. 재미있는 일을 호스트 객체로, 때로는 단순히 속성에 액세스하려 할 때 실패합니다. (일반적으로 * window *로는 안전하지만 다른 호스트 객체는 그렇게 용서할 수 없습니다). 브라우저가 아닌 환경에서 코드를 실행할 수있는 창보다는 전역 개체에 대한 참조를 사용하는 것이 훨씬 더 강력합니다. – RobG

+0

@RobG -이 브라우저가 작동하지 않는 브라우저를 찾을 수 있습니까? 나는이 방법이 항상 안전하다는 것을 알고있었습니다. – jfriend00

+0

이 작업을 수행하는 방법은 여러 가지가 있습니다. 감사합니다. –

관련 문제