2008-09-16 17 views
3

イメージデータをクリップボードにコピーする必要があるXULRunnerアプリケーションがあります。クリップボードへのテキストのコピーを処理する方法を理解しており、クリップボードからPNGデータを貼り付けることができます。私が理解できないことは、他のアプリケーションに貼り付けることができるように、データURLからクリップボードにデータを取得する方法です。XULアプリケーションの画像データをクリップボードにコピーするにはどうすればよいですか?

これは私がテキスト(まあ、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。

答えて

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'としてコピーします。

+0

私たちと共有してくれてありがとうJoel! +1 – pc1oad1etter

2

Neal Deakinはxulrunnerにarticle on manipulating the clipboardを持っています。私はそれがあなたの質問に具体的に答えるかどうか分からないが、確かにチェックアウトする価値がある。

+0

これは本当に良い記事ですが、実際は上記のコードの基礎です。残念ながら、バイナリデータをクリップボードに取り込むことは扱いません。レスポンスありがとう! –

+0

Doh! #xulrunner? – pc1oad1etter

+0

#xulrunnerとは何ですか? –

関連する問題