我有一个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中操作剪贴板的文章。我不确定它是否能具体回答您的问题,但是绝对值得一试。