在pc端我经常这样:
// JScript 文件 function copyToClip(type, copytext) { if (window.clipboardData) { if (window.clipboardData.setData("Text", copytext)) { alert("复制成功!") return; } } else if (window.netscape) { try { netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect'); var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard); if (clip) { var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable); if (trans) { trans.addDataFlavor('text/unicode'); var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString); str.data = copytext; trans.setTransferData("text/unicode", str, copytext.length * 2); var clipid = Components.interfaces.nsIClipboard; clip.setData(trans, null, clipid.kGlobalClipboard); alert("复制成功!") return; } } } catch (e) { } } prompt("您使用的浏览器不允许自动复制,请按下 Ctrl+C 进行复制", copytext); }
不支持的情况就弹出input[type=text],使用.select()选中value,让用户自己复制。
移动端直接用的插件 clipboard-js ,介绍的最后边有说明兼容版本,在苹果5及以上亲测可用,华为自带uc浏览器(测试华为荣耀7,荣耀8,荣耀9)皆不可用,其他常用浏览器没问题。
2017.12.15 今天碰见一个新的问题,列表中每一行都有一个 复制 按钮 然后我尝试获取在页面中添加onclick事件传入this,确定是哪一个需要复制,结果是第一次点击无效。。。然后翻了clipboard的github,找到解决方案:https://github.com/zenorocha/clipboard.js/blob/master/demo/constructor-nodelist.html#L18-L19