2010-10-27 17 views
5

Próbuję sprawdzić, czy przeglądarka obsługuje onHashChange lub nie do ukrycia kodu z niego, jeśli nie, to w ten sposób:Javascript: onHashchange test

if(window.onhashchange){ 
    ...code... 
} else { 
    ...other code... 
} 

Próbowałem to zbyt:

if(typeof window.onhashchange === "function"){ 
    alert("Supports"); 
} else { 
    alert("Doesn't Supports"); 
} 

Jak opisano na Quirksmode to powinno działać, ale jeśli zrobić alert na przykład w true state w Safari niż alertów mnie, ale Safari nie wspiera onHashChange: S

Na czym polega problem? Jeśli nie jestem we właściwy sposób, jak mam to sprawdzić?

Odpowiedz

1

Jest prawdopodobne, że wersja Safari, z której korzystasz, dodała obsługę zdarzenia onhashchange od czasu napisania tego artykułu Quirksmode. Testy powinny nadal być ważne; spróbuj w innych przeglądarkach, o których wiesz, że nie obsługują tego wydarzenia.

Edycja: należy również użyć metody opisanej przez @CMS, ponieważ zdarzenie nie będzie domyślnie zawierać funkcji; zatem oba te testy zawiodą.

6

Należy pamiętać, że lepiej jest korzystać z wykrywania funkcji niż z wnioskowania o istnieniu (np. "Onhashchange" w oknie).

@xkit wyjaśnił mi dobry test funkcja działała wokół faktu, że choć IE7 nie obsługuje onhashchange Byłoby jeszcze powrócić prawda istnienia wnioskowania takie jak („onhashchange” w oknie) {/ kodu/} przy korzystaniu z trybu dokumentu standardowego IE7 w IE8.

Co zasugerował @xkit ustawienie flagi (np. Var isSet = true;) w funkcji obsługi zdarzenia onhashchange. Następnie zmieniono window.location.hash przy użyciu JavaScript i sprawdzono, czy flaga została ustawiona.

1

jeśli (window.onhashchange! == undefined) alert ("Obsługa onhashchange");