Mozilla中的Javascript剪贴板SetData错误

时间:2018-06-28 11:39:49

标签: javascript jquery image base64 clipboarddata

我想以编程方式复制图像。我使用了无法正常工作的executeCommand('copy'),因此我用document.addEventListener('copy', modifyCopy);覆盖了复制侦听器。工作,但是在Mozilla中,当我设置数据后在设置数据时会启用油漆粘贴,但会出现以下错误。

您可以检查小提琴以了解我的尝试。 http://jsfiddle.net/32mbd1o0/16/

enter image description here

e.clipboardData.setData('image/png',blobUrl);

2 个答案:

答案 0 :(得分:3)

Firefox仅在复制和剪切事件Source期间支持这些数据类型。

  • 文本/纯文本
  • text / uri-list
  • text / csv
  • text / html
  • image / svg + xml
  • 应用程序/ xml,文本/ xml
  • application / json

一种可能的解决方法described here,将图像作为html数据复制到剪贴板。这有效,但仅当您要粘贴在诸如Microsoft Windows Word或其他文字处理器之类的程序上时。用于处理图形(绘画,photoshop等)的程序无法理解剪贴板上的内容。

最后,您还可以创建依赖于API clipboard.setImageData()的firefox扩展。 Clipboard.setImageData允许您使用图像数据填充剪贴板。该API与Chrome应用程序API(在Firefox 57中添加)兼容,仍应视为实验性的。该API需要剪贴板写入权限。

答案 1 :(得分:0)

非常抱歉,但是JavaScript语言无法做到您想要的那样,请参见C#中的以下代码:

// Copy the selected area to the clipboard.
private void CopyToClipboard(Rectangle src_rect)
{
    // Make a bitmap for the selected area's image.
    Bitmap bm = new Bitmap(src_rect.Width, src_rect.Height);

    // Copy the selected area into the bitmap.
    using (Graphics gr = Graphics.FromImage(bm))
    {
        Rectangle dest_rect =
        new Rectangle(0, 0, src_rect.Width, src_rect.Height);
        gr.DrawImage(OriginalImage, dest_rect, src_rect, GraphicsUnit.Pixel);
    }

    // Copy the selection image to the clipboard.
    Clipboard.SetImage(bm);
}

一些功能和API并未在JavaScript中退出,但是由于某些安全和政策原因,例如Clipboard.SetImage,此代码中带有Bitmap函数的图像已创建并放在剪贴板中,然后诸如Paint,Microsoft Office,Adobe生产的应用程序就可以找到它,但是使用JavaScript则没有API或函数可以执行上述代码。

我花了大约一个小时的时间回答您的问题,我有一个主意,我想将图像更改为base64,然后在剪贴板中复制,但这不是一个好主意,因为它是纯文本和其他应用程序只能看到文本,我知道这很糟糕,但是确实如此。

有时候,我使用Windows 10 snipping tool和Linux shutter截取了部分桌面,并通过Telegram将其发送给了我的朋友,我看到了一个简单的 Ctrl < / kbd> + V 我可以将裁剪后的部分粘贴到聊天区域中,然后将裁剪后的部分自动复制到剪贴板中,我进行了搜索,但不像现在这样,我对其进行了深入搜索并找到了它出,就无法将剪贴板中的图像复制到浏览器区域的外部。

有一种方法只能复制浏览器,将图像转换为base64并将其保存在剪贴板中,然后仅在浏览器中将其作为img标记,并将base64文本设置为src标签的img属性。就是这样。

对不起,不好消息。