首页 > 解决方案 > 为什么`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>

任何人都知道发生了什么?!谢谢

标签: javascripthtml

解决方案


因为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");
      });
}

此外,有关更多信息Promisenavigator.clipboard.writeText方法,请访问以下链接:
链接 1
链接 2
链接 3


推荐阅读