我开发了一个扩展,它添加了显示设备数据(如剪贴板内容等(的选项。我注意到
document.execCommand("paste");
使用selenium在无头模式下进行测试时不返回任何结果。我还写了一个测试页面来确认这一点:
function copyStringToClipboard(str) {
const el = document.createElement('textarea');
el.value = str;
el.setAttribute('readonly', '');
el.style = {position: 'absolute', left: '-9999px'};
document.body.appendChild(el);
el.select();
document.execCommand('copy');
document.body.removeChild(el);
}
function getClipBoard() {
const el = document.createElement("div");
document.body.appendChild(el);
el.contentEditable = true;
el.style = {position: 'absolute', left: '-9999px'};
const range = document.createRange();
range.selectNode(el);
window.getSelection().removeAllRanges();
window.getSelection().addRange(range);
el.focus();
document.execCommand("paste");
return el.innerHTML;
}
copyStringToClipboard("test")
getClipBoard() // is empty
为什么会发生这种情况?
来自文档:
这两个API之间的区别在于document.execCommand类似于键盘复制、剪切和粘贴操作—交换网页和剪贴板之间的数据–而navigator.clipboard在剪贴板中写入和读取任意数据。
您确定问题出在paste
而不是copy
吗?
副本:navigator.clipboard.writeText("test");
如果你想从剪贴板中读取,请使用clipboard.readText((