调用document.execCommand( '复制'); 从Chrome开发者控制台返回false
每次。
给它一个尝试自己。 打开控制台,并运行它,它永远不会成功。
任何想法,为什么?
调用document.execCommand( '复制'); 从Chrome开发者控制台返回false
每次。
给它一个尝试自己。 打开控制台,并运行它,它永远不会成功。
任何想法,为什么?
document.execCommand('copy')
必须由用户触发。 这不仅从控制台,它的任何地方,这不是由用户触发的事件中。 见下面,单击事件将返回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'
})
}
}