浏览器里点击复制到剪贴板的方法
浏览器里点击复制到剪贴板的方法,包括 Android 和 iOS。
今天分享一个在浏览器里点击复制到剪贴板的小方法,经测试所有浏览器都没有兼容性问题,包括 Android 和 iOS,拿走不谢!
const input = document.createElement("input");input.readonly = true;input.value = "想要复制的内容";document.body.appendChild(input);input.select();input.setSelectionRange(0, 9999);if (document.execCommand("Copy")) { document.execCommand("Copy"); console.log("复制成功!");} else { console.log("复制失败,请长按礼包码进行复制!");}input.style.display = "none";document.body.removeChild(input);
注意部分iOS手机会调起软键盘
ios 部分低版本手机在利用以上方法复制时会自动调起软键盘,为了解决这个问题可以使用以下方法(IOS9及以下不支持):
if (navigator.userAgent.match(/(iPhone|iPod|iPad);?/i)) { // vue中特殊机制导致该方法运行两次,因剪贴板只有一次,所以可以提前清空选中内容 window.getSelection().removeAllRanges(); const copyDOM = document.querySelector("#code"); const range = document.createRange(); range.selectNode(copyDOM); window.getSelection().addRange(range); try { if (document.execCommand('Copy')) { const msg = document.execCommand('Copy'); console.log("复制成功!"); } } catch (err) { console.log("复制失败,请长按礼包码进行复制!"); } window.getSelection().removeAllRanges();}
还没两天呢,就被 QA 报了 bug,360 奇酷手机不支持这种方法复制,顿时被啪啪打脸,又实在不想动用原生的方法,所以最后只好妥协了增加长按进行复制的方法,只对该 dom 增加一个属性即可,user-select:all;