Domanda

Dato un grande progetto legacy che utilizza tecnologie ASP.NET, javascript, css, ecc., mi chiedevo se cambiare il DOCTYPE delle pagine Web, diciamo, da HTML 4.0 Transitional a XHTML 1.0 Transitional (o viceversa) in alcun modo potrebbe interrompere le funzioni javascript delle pagine Web.

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 violare alcun codice.

Sto cercando collegamenti ad articoli su cose a cui prestare attenzione in generale, in modo da individuare meglio potenziali problemi nel codice esistente ed evitare di creare problemi durante la scrittura di nuovo codice.

È stato utile?

Soluzione

Il fatto che la modifica di DOCTYPE interromperà qualsiasi funzione javascript dipende davvero da quanto difensivamente sono progettate tali funzioni :)

Ad esempio, quando il documento viene renderizzato in modalità strane , document.body (BODY) diventa un cosiddetto "elemento radice"; quando viene eseguito il rendering in modalità standard, l'elemento radice è in genere un document.documentElement (HTML). Questa è una distinzione piuttosto sostanziale. Se uno script che determina la dimensione dello schermo del browser richiede sempre le proprietà clientWidth / clientHeight su document.documentElement , ovviamente mostrerà risultati errati in modalità quirks (poiché, IIRC, document.documentElement.clientWidth / clientHeight rappresenterebbe le dimensioni dell'elemento HTML, anziché quelle dello schermo).

La maggior parte delle librerie JS di solito dichiarano esplicitamente se la modalità quirks è supportata (noi - Prototype.js - ad esempio, non supportiamo la modalità quirks).

Parlando di HTML vs XHTML , affinché il browser possa rendere il documento come XHTML, devi prima servirlo con il "Content-type" corretto " intestazione (ovvero application / xhtml + xml). Se cambi solo doctype in uno XHTML, ma continui a servire il documento come " text / html " ;, la maggior parte dei browser che conosco lo analizzeranno e lo renderanno comunque come documento HTML .

Tieni presente che ad oggi IE non capisce " reale " Il contenuto XHTML, motivo per cui la pubblicazione di documenti come testo / html (con HTML4.01 doctype) è un metodo consigliato (a meno che IE non sia tra i browser supportati, ovviamente).

Per quanto riguarda le peculiarità del DOM in " real " Documenti XHTML, ho sentito che alcune cose come document.write " non funzionano " e che l'accesso agli attributi del nodo dovrebbe sempre essere eseguito tramite getAttribute / setAttribute (piuttosto che tramite semplici accessori per la proprietà). IIRC, ci sono anche alcuni problemi con innerHTML .

La mancanza di informazioni sul DOM in " real " I documenti XHTML sono probabilmente dovuti alla sua impraticabilità nei documenti / applicazioni per il web generale (vale a dire la mancanza di supporto di IE per esso).

Altri suggerimenti

Se si utilizza il DTD:

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

allora il tuo sito è in modalità strane in IE e quasi standard nei browser moderni, e poiché il dtd transizionale xhtml 1.0 forza la pagina in modalità standard ci saranno problemi di layout e potenziali problemi nel Javascript (specialmente in IE) in quanto vi sono alcune differenze significative tra il modo in cui viene eseguito il rendering del DOM in stranezze rispetto agli standard.

Tuttavia, se il DTD HTML 4.01 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 eseguendo una query su "document.compatMode" nel tuo sito, indicherà "CSS1Compat" se è presente negli standard, altrimenti "BackCompat" se in modalità Quirks.

Suppongo che stai per pubblicare un Content-Type di testo / html con XHTML 1.0 Transitional.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top