我正在尝试将剪贴板数据粘贴到一个变量中,该变量通过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扩展。
这是我到目前为止的代码。剪贴板内容应通过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);
我很感激任何帮助。 谢谢
答案 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);