如何在JavaScript中实现复制到剪贴板?如何原生实现,有第三方库吗?将文本复制到剪贴板的最佳方法是什么?试过以下方式:
function copyToClipboard(text) {
if (window.clipboardData) { // Internet Explorer
window.clipboardData.setData("Text", text);
} else {
unsafeWindow.netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
const clipboardHelper = Components.classes["@mozilla.org/widget/clipboardhelper;
1"].getService(Components.interfaces.nsIClipboardHelper);
clipboardHelper.copyString(text);
}
}
【如何在JavaScript中实现复制到剪贴板(如何原生实现,有第三方库吗?)】但是IE显示语法错误,而Firefox抛出unsafeWindow is not defined.
有三种方式可以实现复制到剪贴板:
方式一:Async Clipboard API [navigator.clipboard.writeText]
支持访问使用promise异步访问了,仅仅支持HTTPS的页面。
方式二:document.execCommand(‘ copy’ )
多数浏览器都支持,访问是同步的,IE会停止JS执行直到交互完成。文本从DOM中读取并放在剪贴板上。
方式三:重写复制事件
该方式运行修改剪贴板上显示的任何复制时间,可以包括纯文本以为的其它格式数据。
实现示例
由于浏览器对新的Async剪贴板API的支持水平,您可能希望回到document.execCommand(‘ copy’ )方法来获得良好的浏览器覆盖率。下面是一个简单的例子:
function fallbackCopyTextToClipboard(text) {
var textArea = document.createElement("textarea");
textArea.value = http://www.srcmini.com/text;
document.body.appendChild(textArea);
textArea.focus();
textArea.select();
try {
var successful = document.execCommand('copy');
var msg = successful ? 'successful' : 'unsuccessful';
console.log('Fallback: Copying text command was ' + msg);
} catch (err) {
console.error('Fallback: Oops, unable to copy', err);
}document.body.removeChild(textArea);
}
function copyTextToClipboard(text) {
if (!navigator.clipboard) {
fallbackCopyTextToClipboard(text);
return;
}
navigator.clipboard.writeText(text).then(function() {
console.log('Async: Copying to clipboard was successful!');
}, function(err) {
console.error('Async: Could not copy text: ', err);
});
}var copyBobBtn = document.querySelector('.js-copy-bob-btn'),
copyJaneBtn = document.querySelector('.js-copy-jane-btn');
copyBobBtn.addEventListener('click', function(event) {
copyTextToClipboard('Bob');
});
copyJaneBtn.addEventListener('click', function(event) {
copyTextToClipboard('Jane');
});
推荐阅读
- event.preventDefault() vs. return false这两种调用方式有什么区别()
- 如何重新随机化或者重新排序JavaScript的数组元素()
- JavaScript如何将现有的回调API转为promise(有示范实例吗?)
- PHP | Ds Vector __construct()函数用法介绍
- JavaScript中的箭头函数用法指南
- Scala中的变量用法介绍
- Python 将标签添加到Kivy窗口
- JavaScript中的变量和数据类型介绍
- PHP ftp_connect()函数用法介绍