我的 XUL 应用程序如何将图像数据复制到剪贴板?

3

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

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

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);

正如我所说,我尝试传输的数据是一个PNG格式的数据URL。因此,我正在寻找与上述等效的方法,例如允许Paint.NET粘贴我的应用程序数据。

2个回答

3

这是我最终使用的解决方法,解决了问题。变量dataURL是我一开始尝试将图像复制到剪贴板的图像。

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);
}

这将把图片复制到剪贴板中,格式为'image/jpg'。


2

Neal Deakin在xulrunner中有一篇关于操作剪贴板的文章。我不确定它是否能具体回答你的问题,但一定值得一看。


这是一篇非常好的文章,事实上它是上面代码的基础。不幸的是,它没有涉及到如何将二进制数据复制到剪贴板上。感谢您的回复! - Joel Anair
只是建议,你可以加入 xulrunner 的 IRC 频道 -- #xulrunner at irc.freenode.net。那里的某个人可能能够回答你的问题。 - pc1oad1etter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接