2015-09-16 12 views

Odpowiedz

7

Sprawdza, czy skrypt jest uruchamiany w przeglądarce internetowej, czy nie.

W internecie istnieje kilka wewnętrzne obiekty, takie jak window innych środowisk (np node.js) nie będą miały window ale mogą mieć inne obiekty jak console (dobrze, console istnieje obecnie w większości przeglądarek teraz, ale to nie było pierwotnie).

+0

Ciągle nie będzie równy łańcuchowi "undefined", ale prawda? To jest '! ==' not'! = ' – Blindy

+0

@Blindy Typ obiektu' window', zwrócony przez operatora 'typeof', będzie równy łańcuchowi' 'undefined''. –

+0

Och, widzę, to ma sens. Jest to typ, a nie sam obiekt – Blindy

6

Za pomocą tego można wykryć, czy kod działa w typowym środowisku przeglądarki (np. Środowisko z DOM przeglądarki) lub w innym środowisku JS, ponieważ obiekt window istnieje w typowym JS przeglądarki, ale nie istnieje w coś takiego jak node.js lub nawet webworker w przeglądarce.

Jeśli obiekt window nie istnieje, wtedy

typeof window === 'undefined' 

więc kod pytasz o:

if (typeof window !== 'undefined') 

wykona blok if jeśli obiekt window istnieje jako zmienną najwyższego poziomu .

W określonym kodzie, który łączyłeś, nie należy uruchamiać kodu kierowanego na przeglądarkę, który odwołuje się do obiektów DOM, takich jak document, jeśli wtyczka zostanie użyta w środowisku innym niż przeglądarka.

+0

@dandavis - skąd pochodzi twój komentarz na temat 'Workers()'? Nie powiedziałem nic o 'Workers()'. – jfriend00

+0

@dandavis - Nie rozumiem, jaki kod WebWorker ma do czynienia z tym pytaniem. Przepraszam, ale po prostu nie rozumiem twojego komentarza. Ten kod wykrywa obecność podobnego do przeglądarki obiektu 'window'. To samo może ci powiedzieć, czy DOM i jego odpowiednie obiekty prawdopodobnie istnieją (w przeciwieństwie do node.js, gdzie nie istnieją), ale nie może ci powiedzieć wszystkiego, co chcesz wiedzieć o swoim środowisku. Niektóre inne rzeczy w środowisku mogą wymagać innych testów (które nie były przedmiotem pytania). W specyficznym kodzie, do którego się odwołuje, służy do określenia, czy można użyć DOM. – jfriend00

+0

Pomniejsze jest to, że nie wszystkie przeglądarki JS mają obiekt najwyższego poziomu _Window_, na przykład Robotnicy, ale typowo masz rację;) – dandavis