2

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

2
  • 1
    I do not fully understand user.js, although from what I understand once I create it I can change my security settings regarding manipulating data from clipboard. I believe you are correct in that I do not actually need it for my requiprements. Thank you for your explanation, solution works beautifully!
    – soliton
    Oct 24, 2014 at 21:58
  • My pleasure. Creative way to reply as you don't have enough rep to reply to the solution.
    – Noitidart
    Oct 24, 2014 at 23:42

1 Answer 1

2

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:

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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.