Невозможно использовать " документ.execCommand ('копировать'); ' из консоли разработчика
вызов документ.execCommand ('копировать'); из консоли разработчика Chrome возвращает false
каждый раз.
попробуйте сами. Откройте консоль и запустите ее, это никогда не удастся.
есть идеи, почему?
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
копировать команды, запускаемые из документа.кадр execcommand() только повлияет содержимое реального буфера обмена, если событие отправляется из событие, которому доверяют и которое инициирует пользователь, или реализация настроена для этого. Как реализации могут быть настройка разрешения доступа на запись в буфер обмена выходит за рамки этой спецификации.
в качестве альтернативы, используйте copy()
команда, встроенная в инструменты Chrome Dev. Вы не можете использовать document.execCommand("copy")
потому что это требует действий пользователя, чтобы вызвать его.
The 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'
})
}
}