在做一个H5的项目,其中需要用到一个复制功能,参考了阮一峰大佬的文章后,决定用clipboard写一个,结果发现某些手机用不了,报DOMException: Write permission denied,也存在这个API,然后就改良了下
function copy(text, callback) {
const clipboardObj = navigator.clipboard;
try {
if (clipboardObj) {
clipboardObj.writeText(text).then(() => {
callback && callback()
}).catch(() => {
// 部分設備不支持
execCommand()
})
} else {
execCommand()
}
} catch (e) {
callback && callback(e||'複製錯誤')
}
function execCommand() {
let oInput = document.createElement('input'); //创建一个input
oInput.setAttribute('readonly', 'readonly'); //设置只读,否则移动端使用复制功能时可能会造成软件盘弹出
oInput.value = text;
document.body.appendChild(oInput); //将input插入到body
oInput.select(); // 选择对象
document.execCommand('Copy'); // 执行浏览器复制命令
oInput.style.display = 'none'; // 将input隐藏
oInput.remove(); // 将input销毁
callback && callback()
}
}