javascript - 如果 `navigator.clipboard.writeText` 在 android 上由 alert() 继续,为什么不将文本复制到剪贴板

标签 javascript html

尝试使用 navigator.clipboard.writeText() 在 chrome for android 上复制一些文本时只要我之后不显示警报,它就可以工作。当我显示 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方法请访问以下链接:
Link 1
Link 2

关于javascript - 如果 `navigator.clipboard.writeText` 在 android 上由 alert() 继续,为什么不将文本复制到剪贴板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69438702/

相关文章:

javascript - 如何根据随机尺寸绘制正方形并显示大小

javascript - 在 meteor 中将元素添加到数组 collections.update

javascript - 从图层集合中搜索/检索原始容器传单图层的最佳方法

javascript - Discord.js setGame() 不再工作

javascript - Meteor.publish 回调未被调用

html - Bootstrap 3 for mobile 中的全宽两列布局

javascript - 如何使用 spry 选项卡面板创建主页链接

html - 为什么我的 <li> 类型没有显示?

javascript - 将数据从 HTML 传输到外部 Javascript 代码

javascript - 如何检查复选框是否没有标签?