Как скопировать данные изображения в буфер обмена в моем приложении XUL?

У меня есть приложение 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, чтобы вставить данные моего приложения.


person Joel Anair    schedule 16.09.2008    source источник


Ответы (2)


Вот обходной путь, который я использовал, который довольно хорошо решает проблему. Переменная 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».

person Joel Anair    schedule 25.09.2008

У Нила Дикина есть статья об управлении буфером обмена в xulrunner. Я не уверен, отвечает ли он конкретно на ваш вопрос, но его определенно стоит проверить.

person pc1oad1etter    schedule 16.09.2008
comment
Это действительно хорошая статья, на самом деле она является основой для приведенного выше кода. К сожалению, это не касается загрузки двоичных данных в буфер обмена. Спасибо за ответ! - person Joel Anair; 16.09.2008
comment
Просто предлагаю присоединиться к irc-каналу xulrunner — #xulrunner на irc.freenode.net. Кто-то там может ответить на ваш вопрос. - person pc1oad1etter; 19.09.2008