У меня есть приложение 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);
И, как я уже сказал, данные, которые я пытаюсь передать, представляют собой PNG в качестве URL-адреса данных. Итак, я ищу эквивалент приведенного выше, который позволит, например, Paint.NET, чтобы вставить данные моего приложения.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


У Нила Дикина есть статья о работе с буфером обмена в xulrunner. Я не уверен, отвечает ли он конкретно на ваш вопрос, но его определенно стоит проверить.
Просто предлагаю присоединиться к irc-каналу xulrunner - #xulrunner на irc.freenode.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);
}
Это копирует изображение в буфер обмена как «изображение / jpg».
Это действительно хорошая статья, фактически она является основой для приведенного выше кода. К сожалению, это не касается загрузки двоичных данных в буфер обмена. Спасибо за ответ!