2013-06-15 2 views
10

JavaScript 라이브러리에서 알림 (http://notifications.spec.whatwg.org/)에 대한 지원을 감지하고 싶다고 가정 해 보겠습니다.브라우저 기능 지원을 감지하는 가장 신뢰할 수있는 방법은 무엇입니까?

window.Notification !== undefined을 사용할 수 있습니다. 그러나 도서관 (또는 다른 도서관)의 사용자가 완전히 다른 목적으로 정의 된 어떤 종류의 세계 Notification 객체를 가지고 있다면 어떻게 될까요?

다른 한편, 다른 라이브러리가 polyfill 인 경우 어떻게해야합니까? 그렇다면 그들의 Notification 객체가 허용됩니다. 전역 객체를 테스트하는 것 외에도 모든 메소드를 테스트해야합니까?

업데이트 :에서 흥미로운 점을 발견했습니다
하나 notifications polyfill :

네이티브/polyfill 개체인지 여부를 감지하는 그런 일에 의존 어떻게 신뢰할 수있는
ret[toString] = function() { 
    return 'function Notification() { [native code] }'; 
}; 

?

+5

라이브러리에 대한 환경 요구 사항을 명확히 설명해야합니다. 그렇다면 걱정할 필요가 없습니다. 사용자가 다른 라이브러리가 협조 할 수 있도록하십시오. –

+1

동의합니다. 사용자가 전역 네임 스페이스를 오염시키는 라이브러리를 사용할 정도로 미친 경우에는 할 수있는 일이 많지 않습니다. 맞습니까? –

+0

다른 옵션이없는 경우에만 좋은 답변입니다. 내가 할 수있을 때마다 잠재적 인 실수에서 사람들을 구하기를 좋아합니다. –

답변

1

기본적으로 두 가지 선택이 있습니다.

우선 일부 폴리필로 설정되어 있으므로 'function Notification() { [native code] }'toString 값을 사용하십시오. 불행하게도이 방법은 신뢰할 수 없습니다. polyfill 작성자가 브라우저에서 신뢰할 수있는 반환 값인지 여부에 대한 정보는 찾을 수 없었습니다.

의견에서 제안하는 또 다른 옵션은 잠재적 인 충돌을 무시하고 단지 존재를 테스트하는 것입니다. 그게 내가 지금 갔던거야.

0

당신은 항상 jQuery를 접근 방식을 가지고 같은과 함께 기존 window.Notifications를 참조하는 것을 다시 정의 할 수 있습니다 :

window._Notification = window.Notification; 

폴 아일랜드어는 설명의 꽤 좋은 일을 this video에 조금있다가 어떻게 작동하는지.

그런 식으로 계속 사용하면서 다른 기능을 계속 사용할 수 있습니다.

희망이 있습니다. :)

+0

나는 당신이 그 질문을 오해했다고 생각합니다. 그는 아무 것도 깨지 않고 덮어 쓰는 방법이 아니라'알림 '을 사용할 수 있는지 여부를 알고 싶어합니다. –

관련 문제