Come sapere se un browser è in modalità "stranezze"?


128

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 contenuto sistema di gestione 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 si può sapere (o: cosa determinerà) quando il browser decide di passare alla modalità "stranezze" anziché utilizzare il suo motore più conforme agli standard?

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

Risposte:


159

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

Utilizzando 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 javascript:parte dopo averla incollata nella barra degli indirizzi, a causa delle recenti modifiche di sicurezza)


C'è un altro potenziale valore in IE che mi sono imbattuto quando ho forzato una vecchia pagina in modalità "EDGE". Il valore era "BackCompat"
Greg Woods,

Ho anche BackCompat in Chrome quando ho impostato DOCTYPE su qualcosa di completamente non valido. Secondo il codice in questa risposta, se il valore è diverso da CSS1Compat, è in modalità stranezze. È davvero vero? Quali sono tutti i possibili valori?
still_dreaming_1

Apparentemente BackCompatible è il valore standard per la modalità "stranezze" / "compatibilità". Ci sono solo i 2 valori: developer.mozilla.org/en-US/docs/Web/API/Document/compatMode
still_dreaming_1

19

Dato che puoi interrogare la modalità di rendering in JavaScript puoi avere un Bookmarklet che ti dirà quale modalità di rendering sta usando 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.');

11

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. Per esempio,

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

imporrà la modalità di stranezza in IE 6 e 7 nonostante non sia realmente un errore (generano un traballante totale quando la prima riga del file non è una dichiarazione). Un breve elenco di tipi / stranezze può essere trovato qui

Prova ad attaccare la seguente riga nel tuo HTML per il test (pessimo comportamento di JavaScript che sto passando qui - scusa ... assicurati che questo non vada mai attivo :)

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

Grazie per il tester javascript, perché i miei primi due tentativi di sfuggire alla modalità stranezze non hanno funzionato.
Noumenon,

css1compat! = modalità stranezze?
Mike Cole,


3

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


2

Se capisco correttamente la modalità strane, una pagina che non convalida rispetto al suo doctype dichiarato non è sufficiente per attivare la modalità strane. Semplicemente non verrà visualizzato correttamente.

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


2

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


2

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


Questo manca il punto della domanda. Ciò non ti aiuta a scrivere javascript che esegue un percorso per la modalità stranezze e un percorso diverso per la modalità standard.
Joel Coehoorn,

In realtà non hai chiesto come farlo in Javascript ma come sapere quale modalità utilizza il browser. Comunque, anche se non lo intendevi, potrebbe aiutare gli altri a cercarlo, io stesso avevo bisogno di sapere come conoscerlo in Firefox e sono arrivato a questa domanda.
Ronen Festinger

@JoelCoehoorn Il vero problema è che non hai mai spiegato cosa sia un "tipo relativamente rigido"!
Lister,

0

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.