javascript - 为什么`navigator.clipboard.writeText`如果在android上通过alert()进行,则不会将文本复制到剪贴板
问题描述
尝试在 chrome for android 上复制一些文本时navigator.clipboard.writeText()
,只要我之后不显示警报,它就可以工作。当我显示 alert() 时,它就不再起作用了。
例如,这可以按预期工作
function myFunction() {
var copyText = document.getElementById("myInput");
copyText.select();
copyText.setSelectionRange(0, 99999);
navigator.clipboard.writeText(copyText.value);
}
<input type="text" value="Hello world" id="myInput" style="width:auto">
<button onclick="myFunction()">copy</button>
但是这不起作用,它不会在控制台中引发任何错误,并且在 PC 上的 chrome 上运行良好,但不适用于 Android。
function myFunction()
{
var copyText = document.getElementById("myInput");
copyText.select();
copyText.setSelectionRange(0, 99999);
navigator.clipboard.writeText(copyText.value);
alert("Successfully copied the text")
}
<input type="text" value="Hello world" id="myInput" style="width:auto" >
<button onclick="myFunction()" >copy</button>
任何人都知道发生了什么?!谢谢
解决方案
因为navigator.clipboard.writeText
方法返回一个promise并且你不需要等待它的结果,如果你像下面这样更正代码就可以了:
function myFunction() {
var copyText = document.getElementById("myInput");
copyText.select();
copyText.setSelectionRange(0, 99999);
navigator.clipboard
.writeText(copyText.value)
.then(() => {
alert("successfully copied");
})
.catch(() => {
alert("something went wrong");
});
}
此外,有关更多信息Promise
和navigator.clipboard.writeText
方法,请访问以下链接:
链接 1
链接 2
链接 3
推荐阅读
- javascript - 票据转换为较小的票据
- javascript - 获取按钮的空值
- android - 如何在 Android 中使用 *.a 库?
- r - R使用骰子字体绘制值?
- java - Wiremock - 自动配置不加载存根
- sql-server - 如何使用来自 PowerBI 报表服务器的 URL 访问将 SSRS 报表导出为 PDF?
- c++ - 如何使用 glVertexAttribPointer() 添加非数组值
- reactjs - 动态引用 Firestore 文档
- python - 进程如何获取python中全局变量的当前值?
- logstash-grok - SSSD 日志的 Grok 模式