javascript - 为什么使用 JavaScript 无法复制到剪贴板?
问题描述
我正在尝试这个功能:
function copyToClipboard(str) {
const el = document.createElement('textarea');
el.textContent = str;
el.setAttribute('readonly', '');
el.style.position = 'absolute';
el.style.left = '-9999px';
document.body.appendChild(el);
const selected =
document.getSelection().rangeCount > 0 ?
document.getSelection().getRangeAt(0) :
false;
el.select();
document.execCommand('copy');
document.body.removeChild(el);
if (selected) {
document.getSelection().removeAllRanges();
document.getSelection().addRange(selected);
}
alert("Success");}
我试过 el.value = str; 也。我究竟做错了什么?
解决方案
已document.execCommand
弃用但仍可跨网络浏览器访问
这navigator.clipboard API
是一个替代的navigator.clipboard
您将要复制到剪贴板的文本像这样传递
navigator.clipboard.writeText(str_to_copy).then(success_callback, failure_callback);
请注意,该选项卡必须处于活动状态才能正常工作,否则您将无权复制剪贴板
API 是异步的,因此您可以使用.then
回调来提醒用户复制剪贴板是否成功。查看Can I Use以了解其在 Web 浏览器中的可用性。
推荐阅读
- java - 如何在 Eclipse 4.18(2020-12) 中使用 Java 8 设置构建项目
- c++ - CWebBrowser2 (MFC) GoBack 方法在没有任何内容可返回时导致崩溃
- sql - 按两个 sql-laravel 字段排序
- php - Smarty foreach 不循环遍历数组中的对象
- jupyter-notebook - iPyWidget - DatePicker 与 SelectionRangeSlider 交互问题
- python-3.x - 如何在 selenium python 中找到元素内的所有 span 标签?
- java - 在 LINUX 系统上使用 MCRTsim 模拟器
- typescript - VSCode Typescript 语法高亮中类型的标记名称是什么?
- arrays - 尽管 getter 和 setter 无法在 Kotlin 中用括号填充二维数组
- java - 为什么在这种情况下我们需要乘法,如何用加法代替?