我的扩展程序有问题。我想粘贴剪贴板中的数据。
到目前为止,我有这个:
function pasteAndGo()
{
document.execCommand('paste')
alert("Pasted")
}
警报出现,但没有粘贴任何内容。
我有一种感觉,这document
是需要改变的部分,但我不知道该怎么做。有任何想法吗?
我的扩展程序有问题。我想粘贴剪贴板中的数据。
到目前为止,我有这个:
function pasteAndGo()
{
document.execCommand('paste')
alert("Pasted")
}
警报出现,但没有粘贴任何内容。
我有一种感觉,这document
是需要改变的部分,但我不知道该怎么做。有任何想法吗?
document.execCommand("paste")
“合理”的浏览器不支持调用,因为它可能使脚本能够从剪贴板读取敏感数据(如密码),这是出于安全考虑。
这是兼容性矩阵的document.execCommand("...")
有关剪贴板事件:
“复制” | “粘贴” | “切” | |
---|---|---|---|
IE | 行 | 行 | 不适用 |
边缘 | 行 | 不适用 | 行 |
火狐 | 行 | 不适用 | 行 |
铬合金 | 行 | 不适用 | 行 |
我的两分钱:
您可以使用document.queryCommandSupported方法检测可能的命令。
编辑:根据 MDNdocument.queryCommandSupported
现在已弃用,不应再使用。
Chrome 中曾经有一个实验性的剪贴板 API,但它在 Chrome 13 中被删除了。
Chrome 已转向更标准的document.execCommand('paste')
,document.execCommand('copy')
和document.execCommand('cut')
命令:https : //developer.mozilla.org/en/Rich-Text_Editing_in_Mozilla#Executing%5FCommands
在 Chrome 中,您需要将权限添加到清单中:“clipboardRead”和“clipboardWrite”。http://developer.chrome.com/extensions/declare_permissions.html
在 Chrome 38 之前,这些剪贴板权限仅适用于扩展页面,例如后台脚本。从 Chrome 39 开始,在清单文件 ( crbug.com/395376 ) 中声明剪贴板权限后,内容脚本也可以使用这些剪贴板 API 。
这在背景页面中对我很有效。
function getClipboard() {
var pasteTarget = document.createElement("div");
pasteTarget.contentEditable = true;
var actElem = document.activeElement.appendChild(pasteTarget).parentNode;
pasteTarget.focus();
document.execCommand("Paste", null, null);
var paste = pasteTarget.innerText;
actElem.removeChild(pasteTarget);
return paste;
};
当然,您的扩展程序仍然需要“clipboardRead”权限,您必须使用消息传递将此信息返回到您的内容脚本:
chrome.extension.sendMessage({
cmd: "clipboard", //$NON-NLS-0$
action: "paste" //$NON-NLS-0$
}, function(response) {
if (response.paste) {
var range = document.getSelection().getRangeAt(0);
range.deleteContents();
range.insertNode(document.createTextNode(response.paste));
}
});
function getClipboard() {
var pasteTarget = document.createElement("div");
pasteTarget.contentEditable = true;
var actElem = document.activeElement.appendChild(pasteTarget).parentNode;
pasteTarget.focus();
document.execCommand("Paste", null, null);
var paste = pasteTarget.innerText;
actElem.removeChild(pasteTarget);
return paste;
};
function onClipboardMessage(request, sender, sendResponse) {
if (request.action === "paste") { //$NON-NLS-0$
sendResponse({
paste: getClipboard()
});
}
}
chrome.extension.onMessage.addListener(onClipboardMessage);
您不能在常规页面上执行它,只能在后台页面中执行。
您需要设置clipboardRead
使用权限document.execCommand('paste')
和clipboardWrite
许可使用execCommand('copy')
和execCommand('cut')
。
否则,权限将被拒绝,什么也不会发生。
查看此链接了解更多详情。