paste data from clipboard using document.execCommand(“paste”); within firefox extension

纵然是瞬间 提交于 2019-11-27 07:19:00

问题


I am trying to paste clipboard data into a variable that gets fed into and fired via XMLhttprequest POST message.

I have created a firefox user.js with this code to increase access to clipboard based on this 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");

Do I need to change "mydomain" in line two? I do not want any sites to have access. Just my internal firefox extension.

I have read several guides here and here as well as mozilla.

Here is the code I have so far. The clipboard contents should get sent POST method via XMLHttpRequest. XMLHttpRequest works, as I have been using it for other variables.

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

I am grateful for any help. Thank you


回答1:


What you need is not the execCommand but you need to read the data from the clipboard. Your addon is in privelaged scope so you don't need to worry about those preferences. (user.js is firefox-addon right?)

See here:

  • MDN :: Using the Clipboard
  • MDN :: nsIClipboard

This way you can read the contents into the var pastedContents.

Here is your example with the above worked in:

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


来源:https://stackoverflow.com/questions/26545871/paste-data-from-clipboard-using-document-execcommandpaste-within-firefox-ex

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!