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

2 行目の「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 に答える