Verwijderd schreef op dinsdag 25 januari 2005 @ 20:07:
idd, browsers behandelen xhtml, wat geserveerd is als text/html als een zooitje text en proberen daar met een bende foutcorrectie erover html uit te filteren. Dit gebeurt met een andere parser dan een xml parser, namelijk een sgml parser.
Als je de XHTML syntax gebruikt dan hoeft de parser niet veel te raden. Dat er een parser wordt gebruikt die ranzige HTML kan lezen, wil niet zeggen dat alles wat die parser kan lezen ranzig is. XHTML is ontworpen om ook door die parsers gelezen te kunnen worden.
Je browser behandelt je xhtml dus gewoon als html, niets meer, niets minder, met wat gevolgen vandien. (onder andere dat je in je js een html 4 dom krijgt, geen xml dom)
HTML 4 DOM is nieuw voor me. Er is inderdaad zoiets als DOM HTML. Versie 1.0 was gemaakt met het oog op HTML 4.01 dat wel. Maar er is niet veel stuntwerk voor nodig om code te schrijven die gewoon werkt.
een leuk voorbeeldje van die foutcorrectie is het negeren van alle /> afsluitingen, als een sgml parser deze correct zou behandelen, zou ie dit lezen als >> en zou je dus overal > characters krijgen (hebben jullie Hixies artikel al gelezen

)
Ja, maar het interesseert mij niets wat Hixie ervan vindt. Ik ben prima in staat zelf een mening te vormen op basis van eigen ervaring.
En die ervaring vertelt mij dat ik nog nooit een serieuze browser dat /> fout heb zien doen.
Handige fix:
JavaScript:
1
2
3
4
| anAnchor = document.getElementById('foo'); //een anchor element bijvoobeeld
if (anAnchor.tagName.toLowerCase() == 'a') {
alert('ja het is een anchor');
} |
dat werkt in tagsoup-html (html 4 & xhtml als text/html), maar niet in een xml dom. Daar zou die a juist een kleine letter moeten zijn (aangenomen dat je tag een kleine letter bevat). Zou je hier een kleine letter van maken, dan werkt het weer niet in de html dom, maar wel in de xml dom.[/quote]
Mijn versie werkt prima. Zo kun je je snippets gewoon overal inzetten.
Over Hixie:
<script> and <style> elements in XHTML sent as text/html have to be escaped using ridiculously complicated strings.
Daarom roep ik al jaren om de scripts en stylesheets in losse bestanden te zetten.
A CSS stylesheet written for an HTML4 document is interpreted slightly differently in an XHTML context (e.g. the <body> element is not magical in XHTML, tag names must be written in lowercase in XHTML). Thus documents change rendering when parsed as XHTML.
Dat valt wel mee als je gewoon weet hoe het zit. Ik gebruik altijd lowercase elementen en attributen, ook in de stylesheets, en ook zorg ik dat met DOM alles lowercase is.
A DOM-based script written for an HTML4 document has subtly different semantics in an XHTML context (e.g. element names are case insensitive and returned in uppercase in HTML4, case sensitive and always lowercase in XHTML; you have to use the namespace-aware methods in XHTML, but not in HTML4). BUT, if you send your documents as text/html, then they will use the HTML4 semantics DESPITE being XHTML! Thus, scripts are highly likely to break when the document is parsed as XHTML.
Het case probleem heb ik al uitgelegd, en namespace-aware methoden heb je niet nodig als je geen XML dialecten met elkaar gaat mixen. Als je weet wat je doet gaat er helemaal niks stuk.
Scripts that use document.write() will not work in XHTML contexts. (You have to use DOM Core methods.)
Dat is toch niet zo'n punt?
Current UAs are, for text/html content, HTML4 user agents (at best) and certainly not XHTML user agents. Therefore if you send them XHTML you are sending them content in a language which is not native to them, and instead relying on their error handling. Since this is not defined in any specification, it may vary from one user agent to the other.
XHTML is ontworpen om te kunnen worden geinterpreteerd door browsers die HTML 4 aankunnen. Iedereen die de laatste jaren een beetje heeft opgelet weet dat er met de (X)HTML zelf niet zoveel misgaat bij het parsen door de browsers die serieus genomen kunnen worden.
XHTML documents that use the "/>" notation, as in "<link />" have very different semantics when parsed as HTML4. So if there was to be a fully compliant HTML4 UA, it would be quite correct to show ">" characters all over the page.
Ik kan niet meer voor de geest halen of die /> in volgend de HTML beschrijving in SGML volledig is toegestaan, maar weet dat dit in elk geval niet misgaat.
Hij schrijft nog veel meer, maar de meeste argumenten zijn een beetje bij elkaar gezocht. Het is een zwak betoog, en ik hecht er totaal geen waarde aan.