/**
* 复制
* @param {*} val 要复制的内容
* @returns
*/
export const copyToClipboard = async val => {
try {
// 使用现代 API 尝试复制
if (navigator.clipboard && navigator.permissions) {
await navigator.clipboard.writeText(val)
return // 如果成功,直接返回
}
// 降级方案
const textArea = document.createElement('textArea')
textArea.value = val
textArea.style.width = 0
textArea.style.position = 'fixed'
textArea.style.left = '-999px'
textArea.style.top = '10px'
textArea.setAttribute('readonly', 'readonly')
document.body.appendChild(textArea)
textArea.select()
// 尝试执行复制操作
const successful = document.execCommand('copy')
if (!successful) {
throw new Error('无法复制文本')
}
// 清理
document.body.removeChild(textArea)
} catch (err) {
console.error('复制失败:', err)
}
}
copy一段JSON数据并在TextArea标签里显示
const jsonStr='{
"title": "分析",
"path": null,
"state": 1,
"type": "MENU",
"list": [],
}'
copyToClipboard(JSON.stringify(jsonStr, null, 4))