2009-11-30 21 views
60

Ho appena inciampare su un pezzo di codice che non ho mai visto prima:Javascript: document.execCommand cross-browser?

document.execCommand('Copy');

che sembra copiare il contenuto degli appunti per l'elemento a fuoco.

Questa funzionalità è disponibile per il cross-browser?


ho trovato a page che mostra una matrice di compatibilità per document.execCommand.

+1

Link è interessante, ma è così vecchio che include solo Firefox 2 e non include cromato a tutti. Qualcuno sa di una matrice successiva? –

+2

Vedere http://caniuse.com/#feat=document-execcommand –

risposta

24

Questo è per 'modalità di progettazione' in cui il browser trasforma efficacemente il documento in un editor. L'API execCommand è nata con IE ed è stata successivamente added to HTML5. Esattamente quali comandi sono supportati, così come il loro comportamento varia attraverso i browser. L'accesso agli appunti è considerato un rischio per la sicurezza.

+0

Accesso agli Appunti: è quello che pensavo fosse il rischio per la sicurezza. Grazie! – jldupont

+3

Per coloro che vogliono approfondire la questione, ho trovato la seguente [penna del codice] (http: // codepen.io/netsi1964/pen/QbLLGW) che offre una buona ripartizione dei diversi execCommand disponibili con diversi browser. –

+0

Trovato un exploit sullo stesso: https://github.com/dxa4481/Pastejacking/blob/master/index.html –

3

Aggiornamento: Beh, document.execCommand è documentato in the Mozilla DOM documentation, ma la sua descrizione sembra leggermente diversa dalla documentazione MSDN.

Sono ancora abbastanza sicuro che non sia nello standard ECMA-262.

+0

Come mai ci sono dei blip su Mozilla.org? https://developer.mozilla.org/En/Document.execCommand – jldupont

+8

Perché un metodo DOM dovrebbe essere in una lingua standard? Sono abbastanza sicuro che 'document' o' window' non facciano parte dello standard ECMA-262. –

+1

@Elijah Gray: buon punto. Il linguaggio JavaScript è standardizzato da ECMA, mentre il DOM è standardizzato dal W3C. Ma non penso che 'document.execCommand' sia nello standard DOM W3C. (Un rapido controllo delle specifiche DOM-1 su w3c.org sembra confermare.) –

4

Sì, l'ho usato in IE, Chrome, Safari. Se funziona per questi browser, dovrebbe funzionare per il resto. Ad ogni modo, il metodo execCommand dell'oggetto document viene utilizzato per eseguire comandi relativi alle funzioni di modifica Rich Text incorporate nel browser. La sintassi del execCommand è la seguente: document.execCommand(command, uiBool, argument)

Il parametro di comando è il comando da eseguire - grassetto, sottolineato, font, ecc

Allora avete la uiBool che è il valore booleano che specifica se o no dovrebbe essere mostrata l'interfaccia utente predefinita.

E l'ultimo parametro è l'argomento utilizzato per alcuni comandi che richiede il superamento di un argomento. Se nessun argomento è richiesto dal comando, passiamo il valore di null come terzo parametro.

Esempio:

document.getElementById("whateverID").document.execCommand('bold', false, null); 

o:

document.getElementById("whateverID").document.execCommand('bold', false, <a variable nae>); 
Problemi correlati