【问题标题】:XPConnect (Firefox) - how to get value out of objectXPConnect (Firefox) - 如何从对象中获取价值
【发布时间】:2009-11-03 04:27:13
【问题描述】:

我正在尝试创建从剪贴板 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;

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

【问题讨论】:

    标签: javascript out out-parameters universalxpconnect


    【解决方案1】:

    事实证明,我能够回答自己的问题。这对我来说有点 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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-28
      • 2019-05-27
      • 1970-01-01
      • 2022-12-03
      • 1970-01-01
      • 2022-01-18
      相关资源
      最近更新 更多