Domanda

Supponiamo che tu abbia una pagina con un doctype e un markup HTML relativamente rigidi che è abbastanza vicino alla conformità, ma forse manca in alcuni modi sciocchi, forse a causa del contenuto dell'utente che è fuori dal tuo controllo ... diciamo che stai lavorando su un sistema di gestione dei contenuti o un tema per un sistema di gestione dei contenuti in cui controlli una struttura di base e hai bisogno di javascript, ma non sei responsabile di tutto ciò che va nelle pagine.

Come puoi sapere (o: cosa determinerà) quando il browser decide di entrare in "stranezze" modalità piuttosto che utilizzare è motore più conforme agli standard?

Sto cercando risposte per ciascuno dei principali browser, dal momento che IE, Chrome, Safari e Firefox gestiranno tutti in modo diverso. È sufficiente un singolo errore per forzarlo o hai un margine di manovra?

È stato utile?

Soluzione

In Firefox e Opera puoi determinare se il tuo browser è in modalità "Quirks" controllando le informazioni sulla pagina.

Usando document.compatMode , ti dirà la modalità in cui ti trovi con la maggior parte dei browser.

In Chrome, Safari e IE , esegui questo javascript nella barra degli indirizzi:

 javascript:window.alert('You are in ' + (document.compatMode==='CSS1Compat'?'Standards':'Quirks') + ' mode.')

(tieni presente che dovrai digitare nuovamente la parte javascript: dopo averlo incollato nella barra degli indirizzi, a causa delle recenti modifiche di sicurezza)

Altri suggerimenti

Dato che puoi interrogare la modalità di rendering in JavaScript puoi avere un Bookmarklet che ti dirà quale modalità di rendering sta utilizzando una pagina.

Ho trovato questo bookmarklet in modalità rendering che funziona bene per me:

javascript:m=(document.compatMode=='CSS1Compat')?'Standards':'Quirks';window.alert('You%20are%20in%20'%20+%20m%20+%20'%20mode.');

La risposta completa alla tua attuale domanda specifica di "È sufficiente un singolo errore per forzarlo o hai un margine di manovra?" è che dipende totalmente dall'errore. Ad esempio,

<!-- Comment -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

forzerà la modalità stranezze in IE 6 & amp; 7 nonostante non si verifichi davvero un errore (generano un traballante totale quando la prima riga del file non è una dichiarazione). Un breve elenco di tipi / stranezze è disponibile qui

Prova a inserire la seguente riga nel tuo codice HTML per il test (pessimo comportamento di JavaScript che sto passando qui - scusa ... assicurati che non vada mai in diretta :)

<a href="javascript:alert(document.compatMode);">What mode am I?</a>

Secondo http://www.quirksmode.org/css/quirksmode.html: " Il problema era che alcune pagine scritte in modalità strane avevano doctype. Pertanto, ogni browser ha un proprio elenco con doctypes che attivano la modalità stranezze. Vedi questa tabella di confronto del browser per una panoramica di questi elenchi: http://hsivonen.iki.fi/doctype/ "

Spero che questo aiuti

Se dici a IE che dovrebbe essere rigoroso (tramite doctype) non cambierà idea a metà della pagina.

Se capisco correttamente la modalità quirks, una pagina che non si convalida con il suo doctype dichiarato non è sufficiente per attivare la modalità quirks. Semplicemente non verrà visualizzato correttamente.

La miglior risorsa che ho trovato per determinare in che modo diversi browser gestiscono ciascun tipo di documento è qui .

Per il componente aggiuntivo Firefox con Web Developer Toolbar, puoi vedere il trio di icone sulla destra della barra. Quello più a sinistra ti dice in che modalità sei.

In IE lo vedrai negli strumenti di sviluppo (premendo F12), lo dice nel menu: Modalità documento: ... E puoi anche forzare una modalità diversa lì.

nella pagina html5, scrivi " <! DOCTYPE html > " iniziare con la pagina può cambiare in document.compatMode = 'CSS1Compat'

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