Domel pisze:To ze nie podoba mi sie sam document.all to jest oczywiste ale nawet samo jego wprowadzenie mi sie nie podoba. Bo lamie specyfikacje JS. Spojrzmy na przyklad:
- Kod: Zaznacz cały
if (document.all) {
alert("Tak, obsluguje document.all");
}
else {
alert("Buhaha, dales sie nabrac bo myslisz ze nie obsluguje a ja obsluguje :P");
}
No sorry ale nie lubie jak mnie ktos (lub cos) oszukuje. Ale juz nie o to chodzi, takie cos lamie zasade absolutna w jezykach programowania - instrukcja warunkowa if - else musi dzialac tak jak powinna.
Ale przecież if działa dobrze. I nie łamie żadnej specyfikacji (poza specyfikacją document.all na MSDN
document.all w Mozilli to nie jest zwykła kolekcja, to osobna klasa. Jej domyślna konwersja na wartość logiczną to zdaje się po prostu false (czy undefined, nie chce mi się teraz sprawdzać).
Czyli jesli warucek jest spelniony to wykonuje kod po if jesli nie to po else.
Tak. I tak właśnie się dzieje. Ponieważ "(Boolean) document.all" to false, to warunek nie jest spełniony.
Gdybyś chciał, żeby "(Boolean) document.all == true", to wtedy znaczna ilość stron przestałaby działać (bo wielu innych rzeczy z IE DOM Mozilla nie obsługuje).
quiris pisze:Ech... niewykrywalne... Już widzę te wirtuozerskie testowanie wersji przeglądarki Mozilla. Jeśli wersja większa niż 1.7 to MSIE...
E tam, wirtuozerskie. I żadne "jeśli wersja...":
Wariant 1 - typ obiektu:
- Kod: Zaznacz cały
if ((typeof document.all == "function") || (typeof document.all == "object" ))
alert ("Masz obsługę document.all");
Wariant 2 - istnienie metody tags():
- Kod: Zaznacz cały
if (document.all.tags)
alert("Masz obsługę document.all");
Wariant 3:
- Kod: Zaznacz cały
<div id="bleble"></div>
...
if (document.all.bleble) {
alert("Masz obsługę document.all");
}
Co do tego, kto jest winien obsługi document.all -- można spekulować o tej firmie, która od dawna planowała tego rodzaju ficzer. Sun też kiedyś coś podobnego proponował, ale wtedy kazano im iść na szczaw (choć wówczas były to jeszcze czasy Netscape).