MozillaPL.org - polskie centrum Mozilli

Główne menu:

[xml] document.write i przyjaciele nie działają w dokum. XML

Jak tworzyć strony WWW zgodnie ze standardami

Moderator: Pomocy?!

[xml] document.write i przyjaciele nie działają w dokum. XML

Postautor: quiris » 27 grudnia 2003, 00:27

Przeglądarka: Opera/7.50 (Windows NT 5.2; U) [en]

Czy mógłby mi ktoś naświetlić dlaczego funkcja document.write i podobne nie działają w trybie XML (gdy przeglądarka używa parsera XML)? Widzę to zarówno w Mozilli, jak i w Operze 7.50 (dopiero od tej wersji zaczeła ona wspierać skrypty w dokumentach XML). Obiło mi się o uszy, że te funkcje są niezgodne z aplikacjami XML. Jeśli tak, to dlaczego? Może jakieś odesłania do dokumentacji?

BTW: Dopiero dziś uświadomiłem sobie potęgę korzystania z parserów XML w przeglądarkach :D. I dotarło do mnie jak głęboko upośledzone jest MSIE w tym względzie :cry:
Ostatnio zmieniony 02 stycznia 2004, 20:49 przez quiris, łącznie zmieniany 1 raz
quiris
 
Posty: 659
Z nami od: 31 lipca 2002, 06:53

Re: document.write i przyjaciele nie działają w dokumentach

Postautor: Domel » 27 grudnia 2003, 14:38

Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031016 K-MeleonPL/0.8.2 (domel)

quiris pisze:Obiło mi się o uszy, że te funkcje są niezgodne z aplikacjami XML. Jeśli tak, to dlaczego?

Przeciez juz raz pytales :o
Sprawa jest banalna nie nie mozna generowac zcznikow i innych czesci XML-a przez cos co nie jest natywne w XML-u, poniewaz:
1. Parser musi miec slelnione zalozenia ze specyfikacji a to w wielu przypadkach (poniwaz document.write na to pozwala) zgeneruje kod w rozny sposob niezgodny ze specyfikacja np na co parser powinien byc uczulony szczegolnie <
2. Oczywiscie problem z punktu 1 mozna rozwiazanc (a nawet powinno sie) przes sekcje CDATA a z definicje CDATA nie spowoduje wyswietlenia sie znacznika XML. Tutaj istnieje jeszcze jeden klopot wynikajacy z zasad zadzacych sie w CDATA (lub w "starych" komentarzach) dane ciagi znakow parser wylapuje jako niedozwolone.

quiris pisze:Może jakieś odesłania do dokumentacji?

Nie, poniewaz tlumaczylem Ci nawet na dokladnie tym przykladzie dlaczego tego nie znajdziesz w dokumentacji.

quiris pisze:BTW: Dopiero dziś uświadomiłem sobie potęgę korzystania z parserów XML w przeglądarkach :D. I dotarło do mnie jak głęboko upośledzone jest MSIE w tym względzie :cry:

Nie, nie Domel nie daj sie sprowokowac ;). Nie moge juz mam palce na klawiaturze juz... Uf w ostatniej chwili sie powstrzymalem przed trolowaniem :D

BTW co masz na mysli w trybie XML - XHTML czy well-formated XML? Bo cos szuje ze to drugie? Jesli dobrze zgaduje do w jaki sposob osadzisz skrypt w XML-u?
Domel
 
Posty: 2252
Z nami od: 14 kwietnia 2002, 19:10
Lokalizacja: Białystok

Re: document.write i przyjaciele nie działają w dokumentach

Postautor: quiris » 28 grudnia 2003, 00:57

Przeglądarka: Opera/7.50 (Windows NT 5.2; U) [en]

Domel pisze:
quiris pisze:Obiło mi się o uszy, że te funkcje są niezgodne z aplikacjami XML. Jeśli tak, to dlaczego?

Przeciez juz raz pytales :o

Hmm... http://mozillapl.org/forum/viewtopic.php?p=25816#25816
Jak widzisz nie pytałem się o to, tylko napisałem, że nie znalazłem szerszej dokumentacji na ten temat. W tamtym wątku również nie uzyskałem takiego wyjaśnienia jak dziś. Za które oczywiście dziękuję :)

Tutaj istnieje jeszcze jeden klopot wynikajacy z zasad zadzacych sie w CDATA (lub w "starych" komentarzach) dane ciagi znakow parser wylapuje jako niedozwolone.

Hmm... Mógłbym prosić o bardziej szczegółowe informacje w tym punkcie?

BTW co masz na mysli w trybie XML - XHTML czy well-formated XML? Bo cos szuje ze to drugie?


No i źle trafiłeś, bo mam na myśli tylko i wyłącznie XHTML (application/xhtml+xml). Ta potęga to może zbyt szumne słowo. Chodziło mi o to, że po prostu parser ładnie wyłapuje mi wszelkie błędy składni i widzę od razu gdzie, co poprawić (nie muszę co chwilę walidować dokumentu). Szczerze mówiąc to na tym obszarze zaczynam dopiero stawiać pierwsze kroki. Stąd moje pytania. Być może banalne, ale dla mnie interesujące i ważne.
quiris
 
Posty: 659
Z nami od: 31 lipca 2002, 06:53

Re: document.write i przyjaciele nie działają w dokumentach

Postautor: Domel » 28 grudnia 2003, 13:32

Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl-PL; rv:1.4; MultiZilla v1.5.0.2j) Gecko/20030624

quiris pisze:Hmm... Mógłbym prosić o bardziej szczegółowe informacje w tym punkcie?

http://www.w3.org/TR/2000/REC-xml-20001 ... cdata-sect - CDATA
http://www.w3.org/TR/2000/REC-xml-20001006#sec-comments - komentarze.

BTW co masz na mysli w trybie XML - XHTML czy well-formated XML? Bo cos szuje ze to drugie?


BTW Marcoos wyjasnil to od strony JS, niestety akurat zostal nieumyslnie skasowany podczas modernizacji ;) Mam nadzieje ze powtorzy to co napisal.
Domel
 
Posty: 2252
Z nami od: 14 kwietnia 2002, 19:10
Lokalizacja: Białystok

Postautor: marcoos » 30 grudnia 2003, 10:35

Przeglądarka: Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.5) Gecko/20031026 Firebird/0.7

Marcoos wyjasnil to od strony JS, niestety akurat zostal nieumyslnie skasowany podczas modernizacji


Chciałbym zdementować pogłoski - nie zostałem skasowany, jestem cały i zdrowy (no, mam lekki katar, ale to minor issue). Skasowany natomiast został mój post, w którym stwierdzałem, co następuje:

Dokument XML (XHTML, XUL, XAML, whatever_XML) powinien parsowany jednokrotnie. Modyfikacje po parsowaniu powinny dotyczyć już drzewa DOM, a nie kodu (tekstu). Przy jednokrotnym parsowaniu ewentualne skrypty wykonywane są po utworzeniu w pamięci rzeczywistego drzewa DOM. Tak więc document.write() mogłoby trafiać w próżnię, być bez kontekstu.

Oczywiście jedonkrotne parsowanie to przypadek idealny, w praktyce przeglądarki i tak robią to wielokrotnie. Ale w przypadku wielokrotnego parsowania, document.write() pozwala na wstawienie czegokolwiek, co nie jest dobre dla kodu:

Kod: Zaznacz cały
<div>
<script type="text/javascript">
//<![CDATA[
document.write("</div>");
// ]]>
</script>
</div>


Bez wykonywania skryptu masz jak najbardziej poprawny X(HT)ML.

Ewentualne wykonanie kodu przed parsowaniem mogłoby uszkodzić drzewo dokumentu (gdyby </div> został zinterpretowany). Co zrobić z tym </div>? Zintepretować? Czyli wtedy uznać to drugie (nie-skryptowe) </div> za błąd? I przebudować od nowa całe drzewo?

Zablokowanie document.write() wymusza więc także przestrzeganie standardów. Do obsługi dokumentów XMLowych został stworzony DOM i stosowanie do niego narzędzi stworzonych dla HTML 3.2 nie jest dobrym rozwiązaniem.

document.write() jest stosowane czasami do omijania bugów w Netscape 4 (wstawienie takiego nielogicznego </div> naprawdę w NN4 pomaga w niektórych dziwnych sytuacjach, taka magia starej Szkapy ;)).

Natomiast, skoro XHTML 2 nie jest^W^Wma nie być zgodny wstecz, to NN4 i tak go nie obsłuży, przez co jedyne jako-tako sensowne zastosowania tego rodzaju sztuczek znika.
marcoos
Moderator
 
Posty: 2227
Z nami od: 12 października 2002, 10:25
Lokalizacja: Wrocław

Postautor: Domel » 30 grudnia 2003, 13:21

Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031016 K-MeleonPL/0.8.2 (domel)

marcoos pisze:Chciałbym zdementować pogłoski. - nie zostałem skasowany, jestem cały i zdrowy

Marcoos, Ty zyjesz? :D

marcoos pisze:Skasowany natomiast został mój post

Tak jakos niefortunnie mi sie napisalo ;) - potwierdzam chodzilo o post ;)

marcoos pisze:Oczywiście jedonkrotne parsowanie to przypadek idealny, w praktyce przeglądarki i tak robią to wielokrotnie.

Mozesz to rozwinac...

marcoos pisze:Bez wykonywania skryptu masz jak najbardziej poprawny X(HT)ML.

No tak ale jak usuniesz komentarze z JS wtedy kod tez bedzie poprawny. :) Tutaj jest troche sprawa jest zagmatwana. W XHTML 2.0 powinno sie to jakos uproscic tylko jeszcze nie wiadomo jak ;)
Ale napewno duzo sie zmieni poniewaz juz teraz wiadomo ze znacznik noscript "wejsze" do "srodka" znacznika script. Oczywiscie dzieki sekcji CDATA mozna w samym usadowieniu kodu nic nie zmieniac ale coraz czesciej pojawiaja sie glosy zeby usunac wewnetrzne skrypty - pozwoli to na pozbycie sie "zaciemiania" kodu i wreszcie XHTML 2 zblizy sie do konwencji XML-a. (Nie bede sie wglebial w skladnie osadzania zewnetrznych skryptow [i stylow] bo raczej tutaj rowniez sie cos zmieni).
Jesli taki system sie przyjmie to w przyszlosci mozna liczyc na pojawianie sie instrukcji przetwazajacych typu http://www.w3.org/1999/06/REC-xml-stylesheet-19990629/ tylko ze w skryptach.
Czyli cos takiego w rekomendacji XML 2.0 (lub towarzyszacej rekomendacji) :
Kod: Zaznacz cały
<?xml-script href="hello.js" type="text/javascript"?>

Oczywiscie da sie zrobic namiastke tego w skryptach/stylach wewnetrznych przez kotwice i identyfikator ale to IMHO jest przeginka ;)
Jesli taki scenariusz by sie sprawdzil to wtedy wszsytko bylo by jasne i wszyscy zyli by dlugo i szczesliwie.

marcoos pisze:document.write() jest stosowane czasami do omijania bugów w Netscape 4 (wstawienie takiego nielogicznego </div> naprawdę w NN4 pomaga w niektórych dziwnych sytuacjach, taka magia starej Szkapy ;)).

Albo przyklad taki: zeby sie tabela wysrodkowala czasami (nie wiem kiedy chyba losowo ;) ) trzeba przed znacznikiem table dodac zamkniecie znacznika p :D

Wczesniej wspomnialem o komentarzach dlatego pozwole sobie na mala ciekawostke. Mozliwe ze zglosze (jesli bedzie mi to dane) postulat o usuniecie komentarzy (bodz co badz odziedziczonych po skomplikowanym i starym SGML-u) na rzecz instrukcji przetwazania. Poniewaz definicje tych 2-ch tworow sa zbierzne (np oba nie sa czescia character data) wiec przy drobnej modyfikacji mozna by pokusic sie o taki zapis:
Kod: Zaznacz cały
<?xml-comment *** to jest komentarz *** ?>

Warto rowniez zrobic cos z CDATA - tylko jeszcze nie wiadomo co :) Bo o ile powstawala specyfikacja XML 1.0 wywalono z niej sekcje SDATA i inne tego typu to z CDATA juz nie bardzo wiadomo co zrobic. Chyba jedynym rowiazaniem jest jakas glebsza reforma ale nie wiem czy ktos sie na nia zdecyduje.

--update--
Wstepnie zostala zaaprobowana moja propozycja, to znaczy w XHTML 2.0 likwidujemy znacznik < script >, w sekcji head bedzie zamieniony na < link > a w sekcji body na < object >.
Domel
 
Posty: 2252
Z nami od: 14 kwietnia 2002, 19:10
Lokalizacja: Białystok

Postautor: marcoos » 09 stycznia 2004, 10:44

Przeglądarka: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7a) Gecko/20040108 Firebird/0.8.0+ (marcoos)

Domel pisze:
marcoos pisze:Bez wykonywania skryptu masz jak najbardziej poprawny X(HT)ML.

No tak ale jak usuniesz komentarze z JS wtedy kod tez bedzie poprawny. :)


Dopóki nie używasz & czy < w kodzie skryptu...

Wczesniej wspomnialem o komentarzach dlatego pozwole sobie na mala ciekawostke. Mozliwe ze zglosze (jesli bedzie mi to dane) postulat o usuniecie komentarzy (bodz co badz odziedziczonych po skomplikowanym i starym SGML-u) na rzecz instrukcji przetwazania. Poniewaz definicje tych 2-ch tworow sa zbierzne (np oba nie sa czescia character data) wiec przy drobnej modyfikacji mozna by pokusic sie o taki zapis:
Kod: Zaznacz cały
<?xml-comment *** to jest komentarz *** ?>



To by było przegięcie. Co komu szkodzi <!-- --> - krótkie, wygodne do napisania. IMVHO jak za bardzo przegniecie, to XHTML 2 nikt nie będzie używał. :)

--update--
Wstepnie zostala zaaprobowana moja propozycja, to znaczy w XHTML 2.0 likwidujemy znacznik < script >, w sekcji head bedzie zamieniony na < link > a w sekcji body na < object >.


Jak wyżej. :)
marcoos
Moderator
 
Posty: 2227
Z nami od: 12 października 2002, 10:25
Lokalizacja: Wrocław

Postautor: Domel » 09 stycznia 2004, 11:58

Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; PL; rv:1.5) Gecko/20031007

marcoos pisze:Dopóki nie używasz & czy < w kodzie skryptu...

No jak. W sekcji CDATA wszytko powinno przejsc przez parser (nowy parser).

marcoos pisze: XHTML 2 nikt nie będzie używał. :)

Marcoos, niedoczytales. Po pierwsze chodzilo o XML 2.0 a nie XHTML 2.0. Po drugie jesli by to pszeszlo to bylo by gora w XHTML 3.0.

marcoos pisze:Jak wyżej. :)

Zapozno :D
Domel
 
Posty: 2252
Z nami od: 14 kwietnia 2002, 19:10
Lokalizacja: Białystok

Postautor: Gandalf » 09 stycznia 2004, 12:16

Przeglądarka: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6b) Gecko/20031218 Firebird/0.7+

marcoos pisze:Oczywiście jedonkrotne parsowanie to przypadek idealny, w praktyce przeglądarki i tak robią to wielokrotnie.


Ja tez bym prosil o rozwiniecie. Ostatnie dane jakie mam wzgledem "ilosci parsowania" dotycza NS4.
Gandalf
 
Posty: 1802
Z nami od: 29 czerwca 2002, 04:37
Lokalizacja: Warszawa


Wróć do Tworzenie stron WWW

Kto jest online

Zarejestrowani użytkownicy: Bing [Bot], Google [Bot]

cron
Przejdź do powiązanej strony

Nawigacja:

Stopka: