2017-08-30 1 views
2

Comment mettre l'image dans le presse-papiers en utilisant Javascript (dans le gestionnaire de l'événement copy) comme si cela se faisait en cliquant avec le bouton droit sur l'image dans le navigateur et en sélectionnant "Copier l'image" dans le menu contextuel.Comment mettre une image dans le presse-papier en Javascript?

Ce script affiche les détails du contenu du presse-papiers. Pour l'image copiée imprime:

DataTransfer { dropEffect: "none", effectAllowed: "uninitialized", items: DataTransferItemList[2], types: Array[2], files: FileList[1], mozItemCount: 1, mozCursor: "auto", mozUserCancelled: false, mozSourceNode: null } 
DataTransferItem { kind: "string", type: "text/html" } 
DataTransferItem { kind: "file", type: "image/png" } 
Array [ "text/html", "Files" ] 
File { name: "image.png", lastModified: 1504122845696, lastModifiedDate: Date 2017-08-30T19:54:05.696Z, webkitRelativePath: "", size: 385273, type: "image/png" } 

La question peut être reformulée probablement - comment joindre un fichier à clipboardData en fonction de gestionnaire d'événements copy?

document.addEventListener('copy', (event) => { 
    // event.clipboardData.? 
    // maybe event.clipboardData.setData(?) 
}) 

ne fonctionne pas demo en utilisant la méthode setData().

+0

Est-ce que vous cherchez? https://stackoverflow.com/questions/33175909/copy-image-to-clipboard – epascarello

+0

lorsque vous cliquez sur «copier l'image» dans le menu contextuel du clic droit sur l'image, c'est déjà dans le presse-papiers. –

+0

@ koushik-chatterjee oui. Et je veux simuler un tel comportement par programme. – czerny

Répondre

1

//get reference to the div 
 
var div = document.getElementById('someDiv'); 
 

 
//attach a paste event 
 
div.addEventListener('paste', function(ev){ 
 
    var imgFile = null; 
 
    var idx; 
 
    var items = ev.clipboardData.items; 
 
    for(idx=0;idx<items.length;idx++) { 
 
     //check if any content is file 
 
     if(items[idx].kind==="file") { 
 
      //take that file to imgFile 
 
      imgFile = items[idx].getAsFile(); 
 
      break; 
 
     } 
 
    } 
 
    if(imgFile==null) {return;} 
 
    
 
    //create a File reader 
 
    var reader = new FileReader(); 
 
    reader.onload = function() { 
 
     //create an img DOM object 
 
     var img = new Image(); 
 
     //reader.result is nothing but the Base64 representation 
 
     img.src = reader.result; 
 
     
 
     //operate the DOM, clear the div and append the img 
 
     div.innerHTML = ''; 
 
     div.appendChild(img); 
 
    } 
 
    //read that file using the reader 
 
    reader.readAsDataURL(imgFile); 
 
});
<div id="someDiv" style="min-width: 200px;min-height: 200px; border: 1px solid red"> 
 
Paste an image here (using Ctrl + V) 
 

 
</div>

+0

La question portait sur l'écriture d'image dans le presse-papier et la manipulation de l'événement 'copy'. Cette réponse semble concerner l'événement 'paste' et la lecture d'une image depuis le presse-papiers. – czerny

+0

Vous n'avez pas besoin de gérer cela, ce que vous devez gérer est cet événement coller pour mettre ça quelque part –

+0

Ooh, Il semble que vous voulez invoquer l'action de 'copy image' par programmation –