如何将图像数据复制到 XUL 应用程序中的剪贴板?
-
09-06-2019 - |
题
我有一个 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);
而且,正如我所说,我尝试传输的数据是一个 PNG 作为数据 URL。所以我正在寻找与上述相同的内容,例如Paint.NET 粘贴我的应用程序的数据。
解决方案
这是我最终使用的一个解决方法,很好地解决了这个问题。变量 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”复制到剪贴板。
其他提示
尼尔·迪肯有一个 关于操作剪贴板的文章 在 xulrunner 中。我不确定它是否具体回答了您的问题,但绝对值得一看。
不隶属于 StackOverflow