Imansible eseguire execCommand (‘paste’) per funzionare in Chrome

Ho riscontrato un problema con la mia estensione. Mi sono guardato intorno e ho scoperto cosa devo fare, non riesco a farlo funzionare.

Finora, ho:

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

Viene visualizzato l’avviso, ma non è stato incollato nulla.

Ho la sensazione che sia la parte del document che deve essere cambiata, ma non riesco a trovare cosa.

Non è ansible eseguirlo su una pagina normale, solo in una pagina di sfondo.

In Chrome c’era un’API degli Appunti sperimentale, ma questa era stata rimossa in Chrome 13.

Chrome si è spostato verso i comandi più standard document.execCommand('paste') , document.execCommand('copy') e document.execCommand('cut') : https://developer.mozilla.org/en/Rich-Text_Editing_in_Mozilla # Esecuzione% 5FCommands

In Chrome avrai bisogno di aggiungere le autorizzazioni al tuo manifest: “clipboardRead” e “clipboardWrite”. http://developer.chrome.com/extensions/declare_permissions.html

Fino a Chrome 38, queste autorizzazioni per gli appunti erano disponibili solo per le pagine di estensione come gli script in background. A partire da Chrome 39, gli script di contenuto possono anche utilizzare queste API degli Appunti dopo aver dichiarato le autorizzazioni degli Appunti nel file manifest ( crbug.com/395376 ).

Questo funziona bene per me in una pagina di sfondo.

 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; }; 

Naturalmente la tua estensione ha ancora bisogno del permesso “clipboardRead” e devi utilizzare il passaggio dei messaggi per ottenere queste informazioni nello script dei contenuti:

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)); } }); 

background.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); 

È necessario impostare l’authorization clipboardRead per utilizzare document.execCommand('paste') e l’authorization clipboardWrite per utilizzare execCommand('copy') ed execCommand('cut') .
In caso contrario, le autorizzazioni verranno negate e non accadrà nulla.

Controlla questo link per maggiori dettagli.

hai bisogno di un controllo in focali che è in grado di ricevere il contenuto …

Per alcuni esempi riguardanti gli appunti in JS vedi http://www.geekpedia.com/tutorial126_Clipboard-cut-copy-and-paste-with-JavaScript.html
e http://help.dottoro.com/ljcvtcaw.php

Per quanto riguarda le estensioni di Chrome, vedi Copia / incolla non funzionante nell’estensione di Chrome