3

画像データをクリップボードにコピーする必要がある 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 でアプリのデータを貼り付けることができる、上記と同等のものを探しています。

4

2 に答える 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」としてクリップボードにコピーされます。

于 2008-09-25T00:57:38.020 に答える
2

Neal Deakin は、xulrunner でのクリップボードの操作に関する記事を書いています。それがあなたの質問に具体的に答えているかどうかはわかりませんが、チェックする価値は間違いありません。

于 2008-09-16T03:16:35.273 に答える