1.遇到的问题
在Chrome浏览器里代码正常执行,可以通过document.execCommand方式将文本复制到粘贴板,但将代码部署到客户端后不能成功复制
handleCopyText = () => {
let copyText = document.querySelector("#ocr-paste-input");
copyText.select();
document.execCommand('Copy', false, null);
setTimeout(() => {
window.message.success('解析后的文本已复制到剪贴板');
copyText.blur();
}, 0);
}
2. 调试方式
测试环境的代码中增加location.href跳转到本地服务,进行断点调试,执行此处时发现document.execCommand('Copy', false, null); 执行结果为false, 不能成功复制, 所以推测是客户端所嵌浏览器的内核导致的; 但写了一个仅console该结果【document.execCommand('Copy', false, null)】的demo,输出结果是true,至此处傻眼晕古七……
查阅document.execCommand文档,在用户触发的同步操作中,执行结果为true,在异步操作中,执行结果为false,而我代码中在setState后进行该操作,终于找到原因。客户端内核是Chrome/66.0.3359.181,浏览器中内核是Chrome/81.0.4044.122,推测内核差异导致了执行结果的区别,最终改成了支持异步的复制方式
handleCopyText = () => {
let copyText = document.querySelector("#ocr-paste-input");
navigator.clipboard.writeText(copyText.innerHTML)
.then(() => {
window.message.success('解析后的文本已复制到剪贴板');
})
.catch(err => {
// 如果用户没有授权,则抛出异常
window.message.warning('无法复制此文本,请手动复制');
});
}