Come posso copiare i dati dell'immagine negli appunti nella mia applicazione XUL?
-
09-06-2019 - |
Domanda
Ho un'applicazione XULRunner che deve copiare i dati dell'immagine negli appunti.Ho capito come gestire la copia del testo negli appunti e posso incollare i dati PNG dagli appunti.Quello che non riesco a capire è come ottenere i dati da un URL di dati negli appunti in modo che possano essere incollati in altre applicazioni.
Questo è il codice che utilizzo per copiare il testo (beh, 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);
E, come ho detto, i dati che sto cercando di trasferire sono PNG come URL di dati.Quindi sto cercando l'equivalente di quanto sopra che consentirà, ad es.Paint.NET per incollare i dati della mia app.
Soluzione
Ecco una soluzione alternativa che ho finito per utilizzare che risolve il problema abbastanza bene.La variabile dataURL
è l'immagine che stavo cercando di inserire negli appunti in primo luogo.
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);
}
Ciò copia l'immagine negli appunti come "immagine/jpg".
Altri suggerimenti
Neal Deakin ha un articolo sulla manipolazione degli appunti in Xulrunner.Non sono sicuro che risponda specificamente alla tua domanda, ma vale sicuramente la pena provarlo.