使用document.execCommand粘贴来自剪贴板的数据(" paste");在Firefox扩展名内

时间:2014-10-24 10:08:53

标签: javascript firefox firefox-addon clipboard clipboarddata

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

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

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扩展。

我已阅读了多个指南herehere以及mozilla

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

 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);

我很感激任何帮助。 谢谢

1 个答案:

答案 0 :(得分:2)

您需要的不是execCommand,而是需要从剪贴板中读取数据。您的插件位于privelaged范围内,因此您无需担心这些偏好。 (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);
相关问题