Załóżmy, że chcę wykryć obsługę powiadomień (http://notifications.spec.whatwg.org/) w bibliotece JavaScript.Jakie jest najbardziej niezawodne podejście do wykrywania obsługi funkcji przeglądarki?
Mogę użyć window.Notification !== undefined
. Ale co, jeśli użytkownicy biblioteki (lub innej biblioteki) również mają jakiś globalny obiekt zdefiniowany dla zupełnie innego celu?
Z drugiej strony, a jeśli druga biblioteka jest polyfill? Wtedy ich obiekt Notification
jest akceptowalny. Czy powinienem przetestować wszystkie metody oprócz testowania obiektu globalnego?
Aktualizacja:
Zauważyłem ciekawą rzecz w jednym notifications polyfill:
ret[toString] = function() {
return 'function Notification() { [native code] }';
};
Jak niezawodny powołuje się na coś takiego, aby wykryć, czy jest to rodzimy/przedmiot polyfill?
Należy jasno określić wymagania środowiskowe dla swojej biblioteki. Więc nie musisz się tym martwić. Pozwól użytkownikowi upewnić się, że inne biblioteki będą współpracować. –
Zgadzam się. Jeśli użytkownik jest na tyle szalony, aby korzystać z bibliotek zanieczyszczających globalną przestrzeń nazw, niewiele można zrobić, prawda? –
To dobra odpowiedź, ale tylko wtedy, gdy nie ma innych opcji. Lubię, gdy tylko mogę, ratować ludzi przed potencjalnymi błędami. –