2009-09-10 5 views
5

Dato un grande progetto legacy che utilizza tecnologie ASP.NET, javascript, css, ecc., Mi chiedevo se cambiare il DOCTYPE delle pagine Web, ad esempio da HTML 4.0 Transitional a XHTML 1.0 Transitional (o viceversa) in in ogni modo potrebbe interrompere le funzioni javascript delle pagine web.La scelta di DOCTYPE influenza il DOM come visto dal codice javascript?

Ci sono molti articoli e discussioni su come diversi DOCTYPES influenzano il rendering (css) delle pagine, ma non riesco a trovare nulla di simile sull'argomento di rompere qualsiasi codice.

Sono alla ricerca di collegamenti a articoli su cose a cui fare attenzione in generale in modo da individuare meglio i potenziali problemi nel codice esistente ed evitare di creare problemi durante la scrittura di nuovo codice.

risposta

5

Sia cambiando DOCTYPE rompere le funzioni JavaScript davvero dipende da come difensiva tali funzioni sono progettate :)

Ad esempio, quando il documento è reso in modo quirks, document.body (BODY) diventa una cosiddetta "radice elemento"; quando viene eseguito il rendering in modalità standard, l'elemento radice di solito è un document.documentElement (HTML). Questa è una distinzione piuttosto sostanziale. Se uno script che determina le dimensioni dello schermo del browser interroga sempre le proprietà clientWidth/clientHeight su document.documentElement, verrà ovviamente segnalato un risultato errato in modalità quirk (poiché, IIRC, document.documentElement.clientWidth/clientHeight rappresenterebbe le dimensioni dell'elemento HTML, piuttosto che quelle dello schermo).

La maggior parte delle librerie JS di solito indica in modo esplicito se è supportata la modalità quirks (we - Prototype.js - per esempio, non supporta la modalità quirk).

Parlando di HTML vs XHTML, al fine per il browser per rendere documento XHTML, è necessario prima di tutto servire con una corretta intestazione "Content-Type" (vale a dire application/xhtml + xml). Se si cambia solo doctype a XHTML, ma ancora servire documento come "text/html", la maggior parte dei browser so saranno ancora analizzare (e rendering) come documento HTML.

Si noti che fino ad oggi IE non comprende il contenuto XHTML "reale", motivo per cui è consigliabile utilizzare documenti come text/html (con doctype HTML4.01) (a meno che IE non sia tra i browser supportati , ovviamente).

Per quanto riguarda la peculiarità DOM nei documenti "reali" XHTML, ho sentito dire che alcune cose come document.write "non funzionano" e che accedono gli attributi dei nodi devono essere sempre eseguiti tramite getAttribute/setAttribute (piuttosto che attraverso semplici di accesso alle proprietà) . IIRC, ci sono anche alcuni problemi con innerHTML.

La mancanza di informazioni sui DOM nei documenti XHTML "reali" è probabilmente dovuta alla sua non praticità nei documenti/applicazioni per il Web generale (cioè la mancanza di supporto di IE per questo).

+0

In alcune delle modalità documento, gli elementi dom non ereditano da Object.prototype e, a causa di ciò, non sono estendibili con metodi o proprietà personalizzati ... – inf3rno

1

Se si sta utilizzando la DTD:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 

allora il vostro sito è in quirks mode in IE e modalità quasi-standard nei browser moderni, e perché il XHTML 1.0 DTD transitoria forza la pagina per essere in modalità standard ci saranno problemi di layout e potenziali problemi nel Javascript (specialmente in IE) poiché ci sono alcune differenze significative tra il modo in cui il DOM viene reso in stranezze rispetto agli standard.

Tuttavia, se l'HTML 4.01 DTD contiene l'identificatore di sistema:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd"> 

Dovrebbe già essere in modalità standard. Puoi verificare interrogando 'document.compatMode' nel tuo sito, dirà 'CSS1Compat' se è in standard altrimenti 'BackCompat' se in modalità quirks.

Suppongo che tu stia servendo un Content-Type di text/html con XHTML 1.0 Transitional.

+0

Ho verificato il problema del doctype parziale/completo. Ho eseguito un test simile per un doctype parziale/completo xhtml 1.0 e sembra che sia e la causa dei browser per il rendering della pagina in modalità Conformità standard, ovvero il doctype xhtml parziale non forza la modalità in quirks come nel caso di HTML 4.01. Strano. –

Problemi correlati