JavaScript中await navigator.clipboard.readText()仍返回[object Promise],如何解决?
问题原因
textCopied是异步函数,调用后返回的是Promise对象,你直接把这个Promise传给e.clipboardData.setData,所以剪贴板里才会显示[object Promise]。虽然你在textCopied内部用了await,但外部调用它的地方没有等待Promise完成就执行了setData操作。
解决方法
把copy事件的回调改成异步函数,等待textCopied执行完成后再设置剪贴板数据:
<html> This is text <script> // 将回调改为async函数 document.addEventListener('copy', async function (e) { var result = await textCopied(); // 等待异步函数返回结果 e.clipboardData.setData('text/plain', result); e.preventDefault(); }); async function textCopied() { var clipboardContents = await navigator.clipboard.readText(); return clipboardContents } </script> </html>
额外优化提示
你当前的代码逻辑是读取剪贴板已有内容再放回,这和“复制选中的文本”需求不符。如果目标是复制选中的this is text,直接获取选中内容更准确,还能避免异步问题:
<html> This is text <script> document.addEventListener('copy', function (e) { // 获取页面中选中的文本 var selectedText = window.getSelection().toString(); e.clipboardData.setData('text/plain', selectedText); e.preventDefault(); }); </script> </html>
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

