javascript - xul/xpcom 将图像从字符串复制到剪贴板

标签 javascript xul xpcom

我不知道如何将图像复制到剪贴板。 我的代码如下所示:

var image = "data:image/png;base64,..."

var io         = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService);
var channel    = io.newChannel(image, null, null); 
var input      = channel.open();

var trans = Components.classes["@mozilla.org/widget/transferable;1"].createInstance(Components.interfaces.nsITransferable);
trans.addDataFlavor("image/png");
trans.setTransferData("image/png", input, input.available()); 

var clipid = Components.interfaces.nsIClipboard;
var clip   = Components.classes["@mozilla.org/widget/clipboard;1"].getService(clipid);
clip.setData(trans, null, clipid.kGlobalClipboard);

最佳答案

正如 Neil 在新闻组中指出的那样,图像所需的数据是 nsIContainer 实例而不是流。我在网上找不到任何这样做的例子,所以我修改了你的代码:

var image = "data:image/png;base64,...";

var io         = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService);
var channel    = io.newChannel(image, null, null);
var input      = channel.open();
var imgTools   = Components.classes["@mozilla.org/image/tools;1"].getService(Components.interfaces.imgITools);

var container  = {};
imgTools.decodeImageData(input, channel.contentType, container);

var trans = Components.classes["@mozilla.org/widget/transferable;1"].createInstance(Components.interfaces.nsITransferable);
trans.addDataFlavor("image/png");
trans.setTransferData("image/png", container.value, -1);

var clipid = Components.interfaces.nsIClipboard;
var clip   = Components.classes["@mozilla.org/widget/clipboard;1"].getService(clipid);
clip.setData(trans, null, clipid.kGlobalClipboard);

对我来说,这会将图像正确地复制到剪贴板。

关于javascript - xul/xpcom 将图像从字符串复制到剪贴板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6365550/

相关文章:

javascript - jQuery - 点击功能不会触发

javascript - 无法动态添加/删除元素到jstree

c++ - NS_ERROR_XPC_GS_RETURNED_FAILURE 错误码

javascript - 使用 JavaScript 从扩展程序中以编程方式打开 Firefox 浏览器控制台?

c++ - 构建 C++ XPCOM 依赖错误

c++ - XPCOM C++ : Does it support RegExps?

javascript - 检查页面上当前是否显示 DIV

javascript - 在 Typescript 中扩展基类属性

javascript - clearInterval() 不会停止 setInterval() - Firefox 扩展开发

javascript - 获取 Firefox 扩展中的字体列表