Comment copier des données d'image dans le Presse-papiers dans mon application XUL?
-
09-06-2019 - |
Question
J'ai une application XULRunner qui doit copier des données d'image dans le presse-papiers. J'ai compris comment gérer la copie de texte dans le Presse-papiers et je peux coller des données PNG à partir du Presse-papiers. Ce que je ne peux pas comprendre, c'est comment obtenir des données d'une URL de données dans le presse-papiers afin de pouvoir les coller dans d'autres applications.
C'est le code que j'utilise pour copier du texte (enfin, 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);
Et, comme je l'ai dit, les données que je tente de transférer sont des PNG en tant qu'URL de données. Je cherche donc l’équivalent de ce qui précède qui permettra, par exemple: Paint.NET pour coller les données de mon application.
La solution
Voici une solution de contournement que j'ai finalement utilisée qui résout assez bien le problème. La variable dataURL
est l'image que j'essayais d'obtenir dans le presse-papiers.
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);
}
Cela copie l'image dans le Presse-papiers en tant que "image / jpg".
Autres conseils
Neal Deakin a publié un article sur la manipulation du presse-papiers dans xulrunner. Je ne sais pas si cela répond précisément à votre question, mais cela vaut vraiment la peine de vérifier.