2012-05-20 18 views
7

Non riesco a trovare alcuna informazione pertinente sul parametro HTML5 "contenteditable". Ho scoperto che Google Plus sta usando questo per i browser Chrome:Come rilevare se il browser supporta il valore "solo testo" nel parametro contenteditable?

<div contenteditable="plaintext-only"></div> 

Sembra che nessun altro browser supportano questo ed è solo Chrome valore di proprietà. Voglio usarlo nel mio progetto. Tuttavia, ho bisogno di rilevare il browser e scoprire se supporta l'impostazione "solo testo".

Naturalmente, ho potuto rilevare solo Chrome, ma potrebbero esserci altri browser che lo supportano (non ne conosco nessuno al momento) o altri browser di flusso principale potrebbero iniziare a supportare questa funzione in futuro.

Quindi vorrei piuttosto rilevare se la funzionalità "solo testo" è supportata rispetto al rilevamento solo del browser Chrome.

Chiunque può aiutarmi in questo?

risposta

10

Sembra una funzionalità webkit-only. L'spec consente solo "vero", "falso" e "ereditano" come valori possibili per l'attributo

Un bug è stata depositata per aggiungere il supporto per testo in chiaro per le specifiche di modifica, ma è divertente che la richiesta è per "plaintext "invece di" solo testo in chiaro ".

Modifica: Questo codice può essere utilizzato per rilevare il supporto. Demo:

function supportsPlainText() 
{ 
    var d = document.createElement("div"); 
    try { 
     d.contentEditable="PLAINtext-onLY"; 
    } catch(e) { 
     return false; 
    } 
    return d.contentEditable=="plaintext-only"; 
} 

alert(supportsPlainText()); 

Ma ricordate che facendo le pagine specifiche del browser è quello che ci ha guidato al problema IE6.

+0

Grazie per la risposta informativa. Potresti fornire anche del codice JS se possibile come rilevare se il browser supporta valori "solo testo" o "testo semplice" in contenteditable? Che pasticcio con HTML5 di nuovo :-( – Frodik

+1

Il pasticcio è Webkit implementando cose al di fuori degli standard come IE. In questo caso sembra che sia possibile fare il rilevamento delle funzionalità mentre il resto dei browser gira quando un valore non valido è usato, e anche il valore è normalizzato in lettere minuscole: http://jsfiddle.net/e9t2d/1/ Ma ricorda: poiché questo è qualcosa che non rientra in alcuna specifica, può cambiare in qualsiasi momento e non te ne accorgerai fino è troppo tardi – AlfonsoML

+0

Si prega di aggiornare la risposta con il codice fiddle in modo che io possa accettarlo, grazie – Frodik

9

Ecco alternativa, se si preferisce non fare affidamento sulla cattura di eccezioni per rilevare caratteristiche:

function supportsPlaintextEditables() { 
    var div = document.createElement('div'); 
    div.setAttribute('contenteditable', 'PLAINTEXT-ONLY'); 

    return div.contentEditable === 'plaintext-only'; 
} 

console.log(supportsPlaintextEditables); 
//-> true/false 

Questo funziona perché l'impostazione del valore per l'attributo invece che la proprietà non sarà un'eccezione SyntaxError se 'plaintext-only' è un valore non valido, invece imposterà il valore della proprietà sul valore predefinito, 'inherit'.

Ottenere la struttura dopo aver impostato i risultati di attributo in una stringa in minuscolo, quindi impostare il valore dell'attributo 'PLAINTEXT-ONLY' si tradurrà in una proprietà con il valore 'plaintext-only' (supportato/true) o 'inherit' (non supportato/false).

+1

bella risposta, praticamente quello che faccio, purché abbia una sola riga. Volevo solo trovare una risposta per dare un puntello. Ho creato un [plugin] (http://stackoverflow.com/questions/1060008/is-there-a-way-to-detect-if-a-browser-window-is-not-currently-active/16043687#16043687) ispirato alla tua risposta su [window focus] (http: // StackOverflow.it/questions/1060008/is-there-a-way-to-detect-if-a-browser-window-is-not-currently-active /) e hanno cercato di trovare un modo per fornire oggetti di scena da allora e mantenere dimenticando, fino ad ora. lol. Adoro le tue risposte, una delle mie preferite da seguire, continua così! – SpYk3HH

+0

@ SpYk3HH: perché, grazie mille! :-) –

Problemi correlati