| Federico Dal Maso |
Ancora sull'incompatibilità dell'HTML generato
VS.NET scrive automaticamente questa intestazione per l'HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 > Un mio collega mi ha fatto notare che la notazione è incompleta, perchè la specifica W3C richiederebbe una di queste tre notazioni http://www.w3.org/TR/html401/struct/global.html (punto 7.2) Altresì il mio collega mi fa notare che Netscape (si veda http://developer.netscape.com/evangelism/docs/articles/NS62/index-bugfixes.html in particolare '....a DOCTYPE without a URI....') e Mozilla (si veda http://www.mozilla.org/docs/web-developer/quirks/quirklist.html) interpretano l'HTML in modalità diversa se non incontrano l'esatto DOCTYPE W3 conforme. Più precisamente girano in una modalità riservata a mantenere una retrocompatibilità con l'HTML vecchio e lassivo, detta Quirk mode. Il mio collega dice pure che Mozilla girerebbe in tal caso emulando Netscape 4, e che anche Explorer implementa una gestione diversa della grafica a seconda del DOCTYPE. (si veda: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnie60/html/cssenhancements.asp e http://gutfeldt.ch/matthias/articles/doctypeswitch.html) Ora, generando VS.NET pagine con DOCTYPE errato, non c'è il pericolo di produrre HTML non interpretato dai browser in modo ottimo (e conforme alla normativa)? O più chiaramente, con VS.NET si generano pagine ASP.NET che girano in Quirk mode sui browser? |
| Carlo Pinasco |
Re: Ancora sull'incompatibilità dell'HTML generato
Non ho una risposta definitiva.
Se mi fai avere una versione in inglese della tua domanda corredata di una semplice applicazione che riproduce il comportamento proverò a inoltrarlo a qualche collega e a farmi dare una risposta da chi ne sa più di me. Usa pure la mia email per mandarmi i file in attach. Posso solo garantirti che cercherò una risposta, non posso garantirti di trovarla. Se altri nel forum hanno la risposta si facciano avanti. |
| Federico Dal Maso |
Re: Ancora sull'incompatibilità dell'HTML generato
> Troverai che VS.NET ha generato l'intestazione:
> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > > esatto > Volendo lo possiamo anche cambiare a manina, ma se lo imposto a strict il browser > mostrerà una grafica "perfetta" e se ne freghera dei tag deprecated. Quindi la domanda è: > ASP.NET dal canto suo garantisce la generazione di solo HTML strict? > Mi sembra che parlare di ASP.NET sia fuori luogo... Il riferimento al DTD "obsoleto" e' inserito da Visual Studio, che e' "solo" un editor. AFAIK ASP.NET puo' generare contenuti per ogni revisione di HTML: puo' darsi che il file machine.config non sia sempre aggiornato alle reali capacita' di rendering dei vari User agent, ma con Notepad puoi sempre aggiornarlo. > Altrimenti ci turiamo il naso, e ci teniamo i browser in quirk mode. Ci basta saperlo > però. > vedi sopra: credo che il file machine.config sia la soluzione al tuo quesito su ASP.NET In quanto al DTD referenziato da VS.NET, potremmo segnalare ad Aldo (Donetti) nel suo thread che la possibilita' di cambiare il DTD di default sarebbe una caratteristica interessante. spero di esserti stato d'aiuto. |
| Andrea Saltarello |
Re: Ancora sull'incompatibilità dell'HTML generato
on 5. Jul 2002 09:38 Federico Dal Maso wrote:
> Troverai che VS.NET ha generato l'intestazione: > <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > > esatto > Bene questa intestazione non è conforme alla specifica HTML 4.01. beh, va detto (per dovere di cronaca) che il seguente codice HTML e' considerato valido (come documento HTML 4.0) dal W3C Validator ( http://validator.w3.org/file-upload.html ) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Prova</title> </head> <body> <p>Ciao</p> </body> </html> > VS dovrebbe scrivere una di queste 3 intestazioni. dovrebbe? e perche'? Solo perche' e' disponibile una specifica + recente, non e' obbligatorio usarla... Permettimi l'esempio: quando e' uscito il Pentium4 tu hai buttato via il tuo Pentium3? Probabilmente no... > Volendo lo possiamo anche cambiare a manina, ma se lo imposto a strict il browser > mostrerà una grafica "perfetta" e se ne freghera dei tag deprecated. Quindi la domanda è: > ASP.NET dal canto suo garantisce la generazione di solo HTML strict? > Mi sembra che parlare di ASP.NET sia fuori luogo... Il riferimento al DTD "obsoleto" e' inserito da Visual Studio, che e' "solo" un editor. AFAIK ASP.NET puo' generare contenuti per ogni revisione di HTML: puo' darsi che il file machine.config non sia sempre aggiornato alle reali capacita' di rendering dei vari User agent, ma con Notepad puoi sempre aggiornarlo. In ogni caso, se reputi che poter specificare il DTD che VS.NET deve referenziare di default sia una caratteristica interessante puoi segnalarlo nel thread di Aldo Donetti > Altrimenti ci turiamo il naso, e ci teniamo i browser in quirk mode. Ci basta saperlo > però. > vedi sopra: credo che il file machine.config sia la soluzione al tuo quesito su ASP.NET spero di esserti stato d'aiuto. |
| Federico Dal Maso |
Re: Ancora sull'incompatibilità dell'HTML generato
No!
1) Anche la specifica HTML 4 (non 4.01) prevede uno dei tre costrutti detti per l'HTML 4.01 vedi http://www.w3.org/TR/1998/REC-html40-19980424/struct/global.html punto 7.2 in particolare "HTML 4.0 specifies three DTDs, so authors must include one of the following document type declarations in their documents. The DTDs vary in the elements they support. " Faccio notare il MUST VS.NET non inserisce l'URI. Sarà sbagliato il machine.config. Ma questo è il pacchetto originale che ho installato. E così è sbagliato. 2) Il documento da te validato non prova nulla. Prendi un Webcontrol Calendar piazzalo su una pagina. Con target schema IE5 il validator restituisce 4 errori. (ad es. name nel tag form non ci va, manca il type nel javascript,...) Con target schema ie3 vengono generate tabelle anzichè stili e la validazione conta ancora più errori (le height nelle table, ....) Il problema è che la variazione del target schema dev'essere legata al DOCTYPE e viceversa. Così come l'HTML generato da i controlli server dev'essere conforme allo schema. In ASP.NET invece la scrittura dello schema corretto è, salvo artifizi, una stringa statica del file aspx. Secondo me, la scrittura del DOCTYPE corretto dovrebbe essere delegato all'oggetto Page in modo dinamico il quale, in funzione del browser, dovrebbe generare il DOCTYPE massimo possibile più prossimo a quello desiderato dal programmatore. Ed inoltre (importante) i controlli dovrebbero reagire di conseguenza, ossia generare HTML corretto non solo in funzione del browser, ma anche del DOCTYPE. Al di là di questa, non lo nascondo, eccessiva pignoleria, mi da fastidio pensare che le aspx generate vengano visualizzate dai motori di rendering dei browser in quirk mode. |
| Aldo Donetti |
Re: Ancora sull'incompatibilità dell'HTML generato
Ciao a tutti,
posso chiedervi qualche giorno di tempo per chiedere spiegazione (rimedio se necessario) in Corporation? Vi aggiorno. Grazie, Aldo |
| Aldo Donetti |
Re: Ancora sull'incompatibilità dell'HTML generato
Rieccomi.
Ricevo dal Program manager di ASP .NET e pubblico: "We intentionally do not add a DTD URI to the Doctype of our pages. The way to think of this is not putting the browser into a “quirk mode”, it’s avoiding putting the browser into a strict standards conformance mode. Why do we not put ourselves into a strict standards conformance mode? • This breaks backwards compatiblity with many key browsers with high market share (e.g. older versions of IE like IE 5.0 and IE 3). Breaking compatiblity harms more customers than breaking strict W3 standards. • VS targets particular browser versions, not standards. When VS strives to really target a W3 recommendation like XHTML 1.0, we can think about forcing stricter modes at runtime. The IE team also agreed with us that this is the right trade off. It’s good to create pages that are 100% legal, but it is bad to force strict modes if that disables important compatiblity scenarios." E da questo punto di vista concordo. Ciao, Aldo |
| Federico Dal Maso |
Re: Ancora sull'incompatibilità dell'HTML generato
on 9. Jul 2002 10:15 Aldo Donetti wrote:
> "We intentionally do not add a DTD URI to the Doctype of our pages. The way to think of this is not putting > the browser into a “quirk mode”, it’s avoiding putting the browser into a strict standards conformance mode. > Why do we not put ourselves into a strict standards conformance mode? > • This breaks backwards compatiblity with many key browsers with high market share (e.g. older versions of IE > like IE 5.0 and IE 3). Breaking compatiblity harms more customers than breaking strict W3 standards. > • VS targets particular browser versions, not standards. When VS strives to really target a W3 > recommendation like XHTML 1.0, we can think about forcing stricter modes at runtime. > > The IE team also agreed with us that this is the right trade off. It’s good to create pages that are 100% > legal, but it is bad to force strict modes if that disables important compatiblity scenarios." > > E da questo punto di vista concordo. Non capisco. ASP.NET genera HTML dinamicamente, quindi è possibile generare l'HTML nella forma che voglio. Giusto? Ora mi sembrerebbe naturale che, se rilevo come browser , ad esempio, Mozilla 1.0 ritornargli XHTML 1.0, tanto so che lui se lo pappa tranquillamente con il motore di rendering in full-mode. Se invece mi accorgo che dall'altra parte ho IE 3.0 allora gli ritorno HTML 3 e tutti i javascript e tag proprietari che voglio. Non mi sembra che ci siano chissà quali problemi di compatibilità. Anzi, in tale contesto, mi converrebbe sviluppare i miei controlli, dapprima per la versione XHTML (che mi garantirà compatibilità per i browser presenti e futuri) e poi adattarli verso il basso per i browser via via più vecchi. Certo che però ci vorrebbe una gestione dinamica nativa già sull'oggetto Page di tag fondamentali per una pagina, come il DOCTYPE. Nonchè la creazione dinamica browser-dipendente del layout (<table> piuttosto che absolute positioning nello <style>). Altra cosa che rimane poco chiara è la generazione del javascript (il __doEvent ad esempio) che non è DOM Level 1 conforme. Ad esempio è risaputo da tempo che document.mioelemento è una scrittura deprecate e andrebbe sostituita con document.getElementById('mioelemento'). ASP.NET genera sempre la prima forma indipendentemente dal browser. Mi rendo conto che tutti questi problemi sono i rimasugli del vecchio e lassivo HTML e che fra qualche anno, grazie alla rigidità sintattica dell'XML, saranno superati. Ma io pensavo, e speravo, che ASP.NET risolvesse in modo elegante i problemi di versione del browser. Uno dei più grossi fastidi per chi deve sviluppare su web. Invece, da quel che ho capito, ci si deve limitare alla soluzione di compromesso. Ahimè, mi adatterò. Grazie Federico |