2009-11-30 18 views
60

acabo de tropezar en un trozo de código que nunca se había visto antes:Javascript: document.execCommand cross-browser?

document.execCommand('Copy');

que parece copiar el contenido del portapapeles al elemento en el enfoque.

¿Esta funcionalidad está disponible en todos los navegadores?


I conocer a page que muestra una matriz de compatibilidad para document.execCommand.

+1

Link es interesante, pero es tan viejo que sólo incluye Firefox 2 y tampoco incluye cromo en absoluto. Alguien sabe de una matriz posterior? –

+2

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

Respuesta

24

Esto es para "modo de diseño" donde el navegador convierte el documento efectivamente en un editor. La API execCommand se originó con IE y más tarde fue added to HTML5.. Exactamente qué comandos son compatibles, así como su comportamiento varía según los navegadores. El acceso al portapapeles se considera un riesgo de seguridad.

+0

Acceso al portapapeles: eso es lo que pensé, es decir, el riesgo de seguridad. ¡Gracias! – jldupont

+3

Para aquellos que quieran ver más allá, me he encontrado con el siguiente [código de lápiz] (http: // codepen.io/netsi1964/pen/QbLLGW) que proporciona un buen desglose de los diferentes execCommand disponibles con diferentes navegadores. –

+0

Encontré un exploit en el mismo: https://github.com/dxa4481/Pastejacking/blob/master/index.html –

3

Actualización: Bueno, document.execCommand se documenta en the Mozilla DOM documentation, pero su descripción no tiene un aspecto ligeramente diferente de la documentación de MSDN.

Todavía estoy bastante seguro de que no está en el estándar ECMA-262.

+0

¿Cómo es que hay algunas fallas en Mozilla.org? https://developer.mozilla.org/En/Document.execCommand – jldupont

+8

¿Por qué un método DOM estaría en un estándar de lenguaje? Estoy bastante seguro de que 'document' o' window' tampoco forman parte del estándar ECMA-262. –

+1

@Elijah Gray: Buen punto. El lenguaje JavaScript está estandarizado por ECMA, mientras que el DOM está estandarizado por el W3C. Pero tampoco creo que 'document.execCommand' esté en el estándar W3C DOM. (Una comprobación rápida de la especificación DOM-1 en w3c.org parece confirmar esto.) –

4

Sí, lo he usado en IE, Chrome, Safari. Si funciona para este navegador, entonces debería funcionar para el resto. De todos modos, el método execCommand del objeto document se usa para ejecutar comandos relacionados con las funciones integradas de edición de texto enriquecido en el navegador. La sintaxis de la execCommand es la siguiente: document.execCommand(command, uiBool, argument)

El parámetro de comando es el comando a ejecutar - negrita, subrayado, fuente, etc.

entonces usted tiene la uiBool que es el valor booleano que especifica si o no la interfaz de usuario predeterminada debe mostrarse.

Y el último parámetro es el uso del argumento para algunos comandos que requieren que pasemos un argumento. Si el comando no requiere ningún argumento, pasamos un valor de null como tercer parámetro.

Ejemplo:

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

o:

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