无法从开发者控制台使用 `document.execCommand('copy');`
IT技术
javascript
google-chrome
domdocument
execcommand
2021-03-07 05:58:17
4个回答
document.execCommand('copy')
必须由用户触发。它不仅来自控制台,还可以出现在用户触发的事件之外的任何地方。见下文,click 事件将返回 true,但没有事件的调用不会,并且在调度事件中的调用也不会。
console.log('no event', document.execCommand('bold'));
document.getElementById('test').addEventListener('click', function(){
console.log('user click', document.execCommand('copy'));
});
document.getElementById('test').addEventListener('fakeclick', function(){
console.log('fake click', document.execCommand('copy'));
});
var event = new Event('fakeclick')
document.getElementById('test').dispatchEvent(event) ;
<div id="test">click</ha>
见这里:https : //w3c.github.io/editing/execCommand.html#dfn-the-copy-command
从 document.execCommand() 触发的复制命令只会影响真实剪贴板的内容,如果事件是从用户信任和触发的事件中分派的,或者如果实现配置为允许这样做。如何配置实现以允许对剪贴板的写访问超出了本规范的范围。
或者,使用copy()
Chrome 开发工具内置的命令。您不能使用,document.execCommand("copy")
因为这需要用户操作才能触发它。
该copy()
命令允许您复制任何字符串(或对象为 JSON)。要模拟,document.execCommand("copy")
您可以使用以下命令获取当前选择getSelection().toString()
:
copy(getSelection().toString())
如果您需要document.execCommand("copy")
专门进行实际测试(例如,调试使用它的脚本),并且由于某种原因使用调试器并不理想,您可以将代码包装在点击处理程序中,然后点击您的页面:
document.body.addEventListener("click", function() {
console.log("copy", document.execCommand("copy"));
}, false);
我相信,copy
命令需要将焦点放在浏览器上,当您转到控制台并执行命令时,当前窗口会失去焦点。但可能是其他原因,因为如果我屈服,它会起作用setTimeout()
。
此方法适用于最新版本的 safari
const copyUrl = (url, cb) => {
try {
var input = document.getElementById('copyInput')
input.value = url
input.focus()
input.select()
if (document.execCommand('copy', false, null)) {
Message('复制成功')
} else {
Message({
message: '当前浏览器不支持复制操作,请使用Ctrl+c手动复制',
type: 'warning'
})
}
} catch (e) {
Message({
message: `复制出错:${e}`,
type: 'error'
})
}
}
其它你可能感兴趣的问题