关于javascript:如何在XUL应用程序中将图像数据复制到剪贴板?

关于javascript:如何在XUL应用程序中将图像数据复制到剪贴板?

How do I copy image data to the clipboard in my XUL application?

我有一个XULRunner应用程序,需要将图像数据复制到剪贴板。我已经弄清楚了如何处理将文本复制到剪贴板的方法,并且可以从剪贴板粘贴PNG数据。我不知道的是如何将数据URL中的数据获取到剪贴板中,以便可以将其粘贴到其他应用程序中。

这是我用来复制文本的代码(嗯,XUL):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var transferObject=Components.classes["@mozilla.org/widget/transferable;1"].
    createInstance(Components.interfaces.nsITransferable);

var stringWrapper=Components.classes["@mozilla.org/supports-string;1"].
    createInstance(Components.interfaces.nsISupportsString);

var systemClipboard=Components.classes["@mozilla.org/widget/clipboard;1"].
    createInstance(Components.interfaces.nsIClipboard);

var objToSerialize=aDOMNode;

transferObject.addDataFlavor("text/xul");

var xmls=new XMLSerializer();
var serializedObj=xmls.serializeToString(objToSerialize);

stringWrapper.data=serializedObj;

transferObject.setTransferData("text/xul",stringWrapper,serializedObj.length*2);

而且,正如我所说,我要传输的数据是作为数据URL的PNG。所以我正在寻找与上述相同的东西,例如Paint.NET粘贴我的应用程序的数据。


这是我最终使用的解决方法,可以很好地解决该问题。变量dataURL是我首先尝试获取到剪贴板的图像。

1
2
3
4
5
6
7
8
9
10
11
12
var newImg=document.createElement('img');
newImg.src=dataURL;

document.popupNode=newImg;

var command='cmd_copyImageContents'

var controller=document.commandDispatcher.getControllerForCommand(command);

if(controller && controller.isCommandEnabled(command)){
    controller.doCommand(command);
}

这会将图像作为"图像/ jpg"复制到剪贴板。


尼尔·迪金(Neal Deakin)上有一篇关于在xulrunner中操作剪贴板的文章。我不确定它是否能具体回答您的问题,但是绝对值得一试。


推荐阅读