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

我有一个需要将图像数据复制到剪贴板的 XULRunner 应用程序。我已经弄清楚如何处理将文本复制到剪贴板,并且可以从剪贴板粘贴 PNG 数据。我想不通的是如何从数据 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);

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

请先 登录 后评论

1 个回答

Joel Anair

这是我最终使用的一种解决方法,可以很好地解决问题。变量 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);
}

将图像作为“图像/jpg”复制到剪贴板。

请先 登录 后评论