我正在尝试从剪贴板javascript函数创建一个读取,它通常正常工作,但我似乎无法从我使用out参数创建的对象中提取实际字符串(Components.interfaces.nsITransferable)。如果你想知道,这是一个本地内部网,我已启用剪贴板访问。
这是我为out参数创建对象的代码的一部分,然后设置它们。我知道它基本上工作,因为如果我返回obj_length.value它给我正确的长度(* 2为unicode)。但是,obj.value只给我一个[xpconnect wrapped nsISupports]类型的对象。我需要带有剪贴板内容的字符串!
var obj = {};
var obj_length = {};
b.getTransferData("text/unicode", obj, obj_length);
return obj.value;
有人可以帮我弄清楚如何提取剪贴板内容吗?我太近了!
答案 0 :(得分:0)
事实证明,我能够回答我自己的问题。这对我来说有点RTFM,但如果它对其他人有帮助,可以在SO上找到它,这就是我找到它的地方:
https://developer.mozilla.org/en/Using_the_Clipboard
这是我使用的完整代码。它已经过测试并在FF 3.5中运行。它不适用于IE,但测试IE并添加对该浏览器的支持应该是非常简单的。对Chrome,Opera,Safari等不太确定。请记住,你必须在Firefox中启用剪贴板访问,否则它将无法正常工作。因此,它可能不适合公共网站:
try {
netscape.security.PrivilegeManager
.enablePrivilege("UniversalXPConnect");
} catch (e) {
alert("You need to enable clipboard access in FireFox");
return false;
}
var clip = Components.classes["@mozilla.org/widget/clipboard;1"].getService(Components.interfaces.nsIClipboard);
if (!clip) return false;
var trans = Components.classes["@mozilla.org/widget/transferable;1"].createInstance(Components.interfaces.nsITransferable);
if (!trans) return false;
trans.addDataFlavor("text/unicode");
clip.getData(trans, clip.kGlobalClipboard);
var str = new Object();
var strLength = new Object();
trans.getTransferData("text/unicode", str, strLength);
if (str) str = str.value.QueryInterface(Components.interfaces.nsISupportsString);
if (str) pastetext = str.data.substring(0, strLength.value / 2);
return pastetext;