2

我正在尝试将剪贴板数据粘贴到一个变量中,该变量通过 XMLhttprequest POST 消息输入并触发。

我已经使用此代码创建了一个 firefox user.js,以根据此建议增加对剪贴板的访问。

user_pref("capability.policy.policynames", "allowclipboard");
user_pref("capability.policy.allowclipboard.sites", "mydomain");
user_pref("capability.policy.allowclipboard.Clipboard.cutcopy", "allAccess");
user_pref("capability.policy.allowclipboard.Clipboard.paste", "allAccess");

我需要在第二行更改“mydomain”吗?我不希望任何网站都可以访问。只是我的内部 Firefox 扩展。

我已经在这里这里以及mozilla阅读了几本指南。

这是我到目前为止的代码。剪贴板内容应通过 POST 方法发送XMLHttpRequestXMLHttpRequest有效,因为我一直将它用于其他变量。

 var pastetext = document.execCommand('paste');
 var req = new XMLHttpRequest();
 req.open('POST', pastetext, true);
 req.onreadystatechange = function(aEvt) {
     if (req.readyState == 4) {
         if (req.status == 200)
             dump(req.responseText);
         else
             dump("Error loading page\n");
     }
 };
 req.send(null);

我很感激任何帮助。谢谢

4

1 回答 1

2

您需要的不是,execCommand而是您需要从剪贴板中读取数据。您的插件在私有范围内,因此您无需担心这些偏好。(user.js 是 firefox-addon 对吗?)

看这里:

这样您就可以将内容读入 var pastedContents

这是您在上面工作的示例:

var trans = Cc["@mozilla.org/widget/transferable;1"].createInstance(Ci.nsITransferable);
trans.addDataFlavor("text/unicode");
Services.clipboard.getData(trans, Services.clipboard.kGlobalClipboard);
var pastetextNsiSupports = {};
var pastetextNsiSupportsLength = {};
trans.getTransferData("text/unicode", pastetextNsiSupports, pastetextNsiSupportsLength);

var pastetext = pastetextNsiSupports.value.QueryInterface(Ci.nsISupportsString).data;
 var req = new XMLHttpRequest();
 req.open('POST', pastetext, true);
 req.onreadystatechange = function(aEvt) {
     if (req.readyState == 4) {
         if (req.status == 200)
             dump(req.responseText);
         else
             dump("Error loading page\n");
     }
 };
 req.send(null);
于 2014-10-24T18:51:24.367 回答