文章目录
前端实现复制功能
我们可以实现一个复制小功能
一、使用document.execCommand方法
Document.execCommand()是操作剪贴板的传统方法,各种浏览器都支持。
tip:查资料 该方法已废弃 可以用 但是长期使用还是多有不便
操作方法:
const inputElement = document.querySelector('#input');
inputElement.select();
document.execCommand('copy');
先选中 inputElement 元素里面的值 然后再复制
注意,复制操作最好放在事件监听函数里面,由用户触发(比如用户点击按钮)。
如果脚本自主执行,某些浏览器可能会报错。
特殊操作:
如果我们需要复制自己放进去的值就可能就不是很方便了
但是也有方法 创建一个元素 再销毁 对性能可能有一定影响
copy(text) {
var textarea = document.createElement("textarea");
textarea.value = text;
document.body.appendChild(textarea);
textarea.select();
document.execCommand("copy");
document.body.removeChild(textarea);
this.$message({
type: "success",
message: "复制成功",
});
},
弊端
该方法的一些弊端:
- 它是同步操作,如果复制/粘贴大量数据,页面会出现卡顿。
- 有些浏览器还会跳出提示框,要求用户许可,这时在用户做出选择前,页面会失去响应。
- 复制时想保留换行不能用input只能用textarea
- 复制时想保留value里的换行,使用\r成功,\r\n,br不行
二、navigator.clipboard方法
如果navigator.clipboard属性返回undefined,就说明当前浏览器不支持这个 API。
1. writeText()
可以写入剪切板
async function copyPageUrl() {
try {
await navigator.clipboard.writeText(123);
console.log('Page text copied to clipboard');
alert("复制成功啦");
} catch (err) {
console.error('Failed to copy: ', err);
}
}
2.想写入图片的话要使用write()
代码如下(示例):
const clipboard = navigator.clipboard;
if (!clipboard) {
console.log("不支持");
//如果clipboard 是undefined那么就说明该浏览器不支持
}
const button = document.querySelector("button");
button.addEventListener("click", async () => {
try {
const imgblob = await (
await fetch("https://dummyimage.com/100.png")
).blob();
await clipboard.write([
new ClipboardItem({
"image/png": imgblob,
}),
]);
console.log("success");
} catch (error) {
console.log("failed", error);
}
});
3.注意点
1.该功能仅在支持浏览器的安全上下文(HTTPS)中可用,开发环境(localhost)除外
2.它们都是异步方法,返回 Promise 对象。
三、cliboard.js
如果上两种都没有办法满足要求时,可以使用该库
cliboard.js 是一个轻量级的 clipboard 库,用于简化在网页中执行剪贴板操作的过程。
总结
以上三种方法都能实现前端复制功能 可能需要注意浏览器兼容性问题