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);
そして、先ほども述べたように、転送しようとしているデータはデータ URL としての PNG です。したがって、私は許可する上記と同等のものを探しています。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」としてクリップボードにコピーされます。
他のヒント
ニール・ディーキンは、 クリップボードの操作に関する記事 シュルランナーで。あなたの質問に具体的に答えているかどうかはわかりませんが、チェックしてみる価値はあります。
所属していません StackOverflow