2011-08-06 20 views
7

He encontrado un problema con mi extensión. Miré alrededor y encontré lo que tenía que hacer, simplemente no puedo hacer que funcione.No se puede ejecutar execCommand ('paste') para trabajar en Chrome

Hasta ahora, Tengo:

function pasteAndGo() 
{ 
    document.execCommand('paste') 
    alert("Pasted") 
} 

La alerta aparece, pero nada se ha pegado.

Tengo la sensación de que es la parte document que necesita cambiar, pero no puedo encontrar qué.

+0

¿Dónde está ejecutando este código? – serg

+5

Eche un vistazo a esto: http://farter.users.sourceforge.net/blog/2010/11/20/accessing-operating-system-clipboard-in-chromium-chrome-extensions/ –

+0

Este código se está ejecutando en una página web regular, no background.html.Sin embargo, esto ya no es una API experimental, y una parte integrada de Chrome a partir de la versión 13 (http://code.google.com/chrome/extensions/whats_new.html#13) Esto significa que debería funcionar ahora. Además, he agregado los permisos para ello :) –

Respuesta

2

No puede ejecutarlo en una página normal, solo en una página de fondo.

+1

¿Haces todo lo invisible de textarea? Alguien tiene una muestra de código? –

+1

ya no es cierto, consulte la respuesta a continuación ('a partir de Chrome 39, los scripts de contenido también pueden usar estas API del portapapeles después de declarar los permisos del portapapeles en el archivo de manifiesto') – schellmax

+2

¿Un ejemplo de página de fondo? –

0

lo que necesita un control en focues que es capaz de recibir el contenido ...

Para algunos ejemplos en relación con el portapapeles en JS ver http://www.geekpedia.com/tutorial126_Clipboard-cut-copy-and-paste-with-JavaScript.html
y http://help.dottoro.com/ljcvtcaw.php

En cuanto a las extensiones de Chrome ver Copy/Paste Not Working in Chrome Extension

+0

Esa es la página exacta en la que encontré mi formulario de información (El enlace a la otra pregunta de Desbordamiento de pila). Trataré de trabajar para que pegue en el área correcta. : S –

+0

necesitas enfocarte en algo que pueda aceptar lo que está en el portapapeles, como un área de texto cuando el portapapeles contiene texto ... – Yahia

9

Solía ​​haber una API portapapeles experimental en Chrome, pero esto fue eliminado en Chrome 13.

Chrome se ha desplazado hacia los más estándares document.execCommand('paste'), document.execCommand('copy') y document.execCommand('cut') comandos: https://developer.mozilla.org/en/Rich-Text_Editing_in_Mozilla#Executing%5FCommands

En Chrome te' Necesitarás permisos necesarios para agregar a tu manifiesto: "clipboardRead" y "clipboardWrite". http://developer.chrome.com/extensions/declare_permissions.html

Hasta Chrome 38, estos permisos del portapapeles solo estaban disponibles para las páginas de extensión, como las secuencias de comandos de fondo. A partir de Chrome 39, los scripts de contenido también pueden usar estas API del portapapeles después de declarar los permisos del portapapeles en el archivo de manifiesto (crbug.com/395376).

+0

Ya no parece haber ninguna mención del portapapeles en esta documentación .. –

+0

actualización-- aquí está el enlace: http://developer.chrome.com/extensions/declare_permissions.html –

1

Es necesario configurar el clipboardRead permiso para usar document.execCommand('paste') y el permiso para utilizar clipboardWriteexecCommand('copy') y execCommand('cut').
De lo contrario, los permisos serán denegados y no pasará nada.

Compruebe this enlace para obtener más detalles.

5

Esto funciona bien para mí en una página de fondo.

function getClipboard() { 
    var pasteTarget = document.createElement("div"); 
    pasteTarget.contentEditable = true; 
    var actElem = document.activeElement.appendChild(pasteTarget).parentNode; 
    pasteTarget.focus(); 
    document.execCommand("Paste", null, null); 
    var paste = pasteTarget.innerText; 
    actElem.removeChild(pasteTarget); 
    return paste; 
}; 

Por supuesto, su extensión aún necesita el permiso "clipboardRead" y usted tiene que utilizar el paso de mensajes para obtener esta información de vuelta a su script contenido:

content.js:

chrome.extension.sendMessage({ 
    cmd: "clipboard", //$NON-NLS-0$ 
    action: "paste" //$NON-NLS-0$ 
}, function(response) { 
    if (response.paste) { 
     var range = document.getSelection().getRangeAt(0); 
     range.deleteContents(); 
     range.insertNode(document.createTextNode(response.paste)); 
    } 
}); 

fondo .js:

function getClipboard() { 
    var pasteTarget = document.createElement("div"); 
    pasteTarget.contentEditable = true; 
    var actElem = document.activeElement.appendChild(pasteTarget).parentNode; 
    pasteTarget.focus(); 
    document.execCommand("Paste", null, null); 
    var paste = pasteTarget.innerText; 
    actElem.removeChild(pasteTarget); 
    return paste; 
}; 

function onClipboardMessage(request, sender, sendResponse) { 
    if (request.action === "paste") { //$NON-NLS-0$ 
     sendResponse({ 
      paste: getClipboard() 
     }); 
    } 
} 

chrome.extension.onMessage.addListener(onClipboardMessage); 
+0

@peter -ehrlich Hola Peter, ¿qué tal este ejemplo? ¿Es lo que estabas pidiendo? – stackunderflow

+0

Hola @josephduffy ¿conseguiste que esto funcionara? ¿Hiciste un ejemplo de ayuda? – stackunderflow

Cuestiones relacionadas