Je crée une extension Google Chrome qui peut lire le contenu du presse-papiers.
Mais je ne peux pas obtenir la documentation pour cela. Je veux obtenir le contenu du presse-papiers comme dans l'API du presse-papiers d'IE.
Dans le fichier manifeste, j'ai donné des autorisations à

clipboardRead and clipboardWrite.  

J'ai créé une fonction dans la page d'arrière-plan comme ci-dessous

 chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
 if (request.method == "getClipData")
   sendResponse({data: document.execCommand('paste')});
 else
   sendResponse({}); // snub them.
 });

Et dans Content Script j'appelle la fonction comme ça

 chrome.extension.sendRequest({method: "getClipData"}, function(response) {
    alert(response.data);
 });

Mais cela me rend indéfini ...

3
Exception 14 déc. 2011 à 15:29

3 réponses

Meilleure réponse
var str = document.execCommand('paste');

Vous devrez également ajouter la clipboardRead permission.

1
abraham 14 déc. 2011 à 14:36

Document.execCommand ('paste') renvoie le succès ou l'échec, pas le contenu du presse-papiers.

La commande déclenche une action de collage dans l'élément focalisé de la page d'arrière-plan. Vous devez créer un TEXTAREA ou DIV contentEditable = true dans la page d'arrière-plan et le concentrer pour recevoir le contenu de la pâte.

Vous pouvez voir un exemple de comment faire fonctionner cela dans mon extension BBCodePaste:

https://github.com/jeske/BBCodePaste

Voici un exemple de lecture du texte du presse-papiers dans la page d'arrière-plan:

bg = chrome.extension.getBackgroundPage();        // get the background page
bg.document.body.innerHTML= "";                   // clear the background page

// add a DIV, contentEditable=true, to accept the paste action
var helperdiv = bg.document.createElement("div");
document.body.appendChild(helperdiv);
helperdiv.contentEditable = true;

// focus the helper div's content
var range = document.createRange();
range.selectNode(helperdiv);
window.getSelection().removeAllRanges();
window.getSelection().addRange(range);
helperdiv.focus();    

// trigger the paste action
bg.document.execCommand("Paste");

// read the clipboard contents from the helperdiv
var clipboardContents = helperdiv.innerHTML;

Si vous voulez du texte brut au lieu de HTML, vous pouvez soit utiliser helperdiv.innerText, soit passer à l'utilisation d'une zone de texte. Si vous voulez analyser le HTML d'une manière ou d'une autre, vous pouvez parcourir le dom HTML à l'intérieur du DIV (encore une fois, voir mon extension BBCodePaste)

2
David Jeske 12 avril 2017 à 16:47

Nous ne pouvons pas accéder au presse-papiers à partir de javascript au lieu d'IE pour Chrome et d'autres navigateurs.

Le hack pour cela est très simple: créez votre propre presse-papiers personnalisé qui stocke le texte sur la coupe et d'où nous le collons directement

function copy(){
if (!window.x) {
    x = {};
}
x.Selector = {};
x.Selector.getSelected = function() {
    var t = '';
    if (window.getSelection) {
        t = window.getSelection();
    } else if (document.getSelection) {
        t = document.getSelection();
    } else if (document.selection) {
        t = document.selection.createRange().text;
    }
    return t;
}
var mytext = x.Selector.getSelected();
document.getElementById("book").innerHTML =mytext;
}

function cut(){
if (!window.x) {
    x = {};
}
x.Selector = {};
x.Selector.getSelected = function() {
    var t = '';
    if (window.getSelection) {
        t = window.getSelection();
    } else if (document.getSelection) {
        t = document.getSelection();
    } else if (document.selection) {
        t = document.selection.createRange().text;
    }
    return t;
}
var mytext = x.Selector.getSelected();
document.getElementById("book").innerHTML =mytext;
x.Selector.setSelected()="";

}

function paste()
{
    var firstDivContent = document.getElementById('book');
var secondDivContent = document.getElementById('rte');


secondDivContent.innerHTML += firstDivContent.innerHTML;
rte.focus();
}

function clear()
{

document.getElementById('rte').innerHTML="";
rte.focus();



}
 <button id="cut"onclick="cut();">Cut</button>
 <button id="copy"onclick="copy();">Copy</button>
 <button id="paste"onclick="paste();">Paste</button>
 Working Div
 <div id="rte" contenteditable="true" style="overflow:auto;padding:10px;height:80vh;border:2px solid black;" unselectable="off" ></div>
 Own Clipboard(hack)
    <div id="book" contenteditable="true"style="background-color:#555;color:white;"> </div>
0
Jean-François Corbett 13 juin 2018 à 06:46
8503738