0

我正在尝试从剪贴板 javascript 函数创建读取,并且它通常可以正常工作,但我似乎无法从使用 out 参数(Components.interfaces.nsITransferable)创建的对象中提取实际字符串。如果您想知道,这是针对本地 Intranet 的,并且我已启用剪贴板访问。

这是我为 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;

谁能帮我弄清楚如何提取剪贴板内容?我好近!

4

1 回答 1

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;
于 2009-11-03T19:08:33.327 回答