前段时间有个先异步获取数据再将数据复制到剪切板的需求,最后找到两种方法,特记录一下。
方法一:使用clipboard.js。这个三方库的核心原理是模仿人的复制操作,先选中一段文字,再执行document.execCommand进行复制或剪切,最后再清除选中内容。但是在使用过程中发现,全都是同步操作时没啥问题,但如果中间有异步操作,例如要点击复制后获取到异步操作的内容后再复制到剪切板,就会发现剪切板有问题。
方法二:使用浏览器新API-navigator.clipboard
// safari浏览器
if (isSafari) {
const clipboardItem = new ClipboardItem({
'text/plain': new Promise((resolve, reject) => {
post("/xxx", {
xxx
}).then(res => {
if (res.status === 200) {
resolve(res.data);
}
})
})
navigator.clipboard.write([clipboardItem])
} else {
post("/xxx", {
xxx
}).then(res => {
if (res.status === 200) {
navigator.clipboard.writeText(res.data)
}
})
}