【问题标题】:How to put an image to clipboard in Javascript?如何在Javascript中将图像放入剪贴板?
【发布时间】:2019-06-19 04:58:44
【问题描述】:

如何使用 Javascript(在 copy 事件的处理程序中)将图像放入剪贴板,就像通过右键单击浏览器中的图像并从上下文菜单中选择“复制图像”来完成一样。

此script 显示剪贴板内容的详细信息。对于复制的图像,它会打印:

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

所以问题可能可以重新表述——如何在copy 事件处理函数中将文件附加到clipboardData?

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

使用setData() 方法无法正常工作demo。

【问题讨论】:

  • 当您在右键单击图像的上下文菜单中单击copy image 时,它已经在剪贴板中。
  • @koushik-chatterjee 是的。我想以编程方式模拟这种行为。
  • 好的,让我为工作演示添加一个答案
  • @epascarello 感谢您的链接

标签: javascript html clipboarddata


【解决方案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>

【讨论】:

  • 问题是关于将图像写入剪贴板和处理copy 事件。此响应似乎与 paste 事件和从剪贴板读取图像有关。
  • 你不需要处理那个,你需要处理的是粘贴事件把它放在某个地方
  • 哦,您似乎想以编程方式调用copy image 的操作
猜你喜欢
  • 2021-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-14
  • 2023-04-08
  • 1970-01-01
  • 2023-04-08
  • 2023-02-21
相关资源
最近更新 更多