900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > JS实现复制内容到剪切板 兼容PC和手机端 支持SAFARI浏览器

JS实现复制内容到剪切板 兼容PC和手机端 支持SAFARI浏览器

时间:2020-09-13 20:50:11

相关推荐

JS实现复制内容到剪切板 兼容PC和手机端 支持SAFARI浏览器

转自:/dreambin/p/9046999.html

Javascript原生有一些事件:copy、paste、cut,

这些事件可以作用的目标元素:

能获得焦点的元素 (如contentEditable内容能编辑或者可以选中的元素),或者是<body>

<div id="cardList"><div class="btn">点击我,复制我</div></div><script type="text/javascript">function copy(str){var save = function (e){e.clipboardData.setData('text/plain',str);//下面会说到clipboardData对象e.preventDefault();//阻止默认行为}document.addEventListener('copy',save);document.execCommand("copy");//使文档处于可编辑状态,否则无效}document.getElementById('cardList').addEventListener('click',function(ev){copy(ev.target.innerText)})</script>

使用jQuery中的方法监听用户的剪切、复制、粘贴的行为:

$("#cut").on("cut",function(){alert("剪切");});$("#copy").on("copy",function(){alert("复制");});$("#paste").on("paste",function(){alert("粘贴");});

这些行为包括使用键盘的ctrl + c操作,或者右击鼠标—>复制等操作。

Evevt.clipboardData 对象

clipboardData是JavaScript剪切板对象,该对象提供了3个常用方法:

clearData(): clipboardData对象从剪切板删除一种或多种数据格式(一个参数:数据类型)

getData(): clipboardData对象从剪切板获取指定格式的数据(一个参数:数据类型)

setData(): clipboardData对象赋予指定格式的数据(两个参数:数据类型,要赋予的值)

*数据类型一般为“"text/plain"”

Evevt.clipboardData 对象兼容性问题

经过尝试,clipboardData对象内兼容大部分px浏览器,像chrome,firefox、ie等,但是在手机端兼容性不是很好,

目前clipboardData在ios上的safari浏览器无效,为解决移动端这个问题,我们引用一个js插件——clipboard.js

clipboard.js依赖于HTML5推出的Selection API和execCommand API

使用方法:

首先在页面中引入

<script src="clipboard.min.js"></script>

使用clipboard.js的自定义属性

<!--使用data-clipboard-target属性指定被复制的标签--><!--使用data-clipboard-action属性指定一些操作,copy(复制),cut(剪切)--><!--注意:cut 操作仅适用于<textarea>和<input>--><div style="margin:2em"><textarea id="id_text"></textarea><button type="button" id="id_copy"data-clipboard-target="#id_text"data-clipboard-action="copy">点击复制</button></div><script type="text/javascript">var clipboard = new Clipboard("#id_copy");clipboard.on("success",function (element) {//复制成功的回调 console.info("复制成功,复制内容: " + element.text);});clipboard.on("error",function (element) {//复制失败的回调 console.info(element);});</script>

高级用法:

//清理Clipboard对象var clipboard = new Clipboard('.btn');clipboard.destroy();

JS实现各种复制到剪贴板:

1、实现点击按钮,复制文本框中的的内容

<script type="text/javascript">function copyyel2(){var yel2=document.getElementById("biao1");yel2.select(); // 选择对象document.execCommand("Copy"); // 执行浏览器复制命令alert("已复制好,可贴粘。");}</script><textarea cols="20" rows="10" id="biao1">用户定义的代码区域</textarea><input type="button" onClick="copyyel2()" value="点击复制代码" />

2、复制专题地址和 url 地址,传给 QQ/MSN 上的好友

<!DOCTYPE html><html xmlns="/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>Js复制代码</title></head><body><p><input type="button" name="anniu1" onClick='copyToClipBoard()' value="复制专题地址和url地址,传给QQ/MSN上的好友"><script language="javascript">function copyToClipBoard(){var clipBoardContent="";clipBoardContent+=document.title;clipBoardContent+="";clipBoardContent+=this.location.href;window.clipboardData.setData("Text",clipBoardContent);alert("复制成功,请粘贴到你的QQ/MSN上推荐给你的好友");}</script>

3、直接复制 url

<input type="button" name="anniu2" onClick='copyUrl()' value="复制URL地址"><script language="javascript">function copyUrl(){var clipBoardContent=this.location.href;window.clipboardData.setData("Text",clipBoardContent);alert("复制成功!");}</script>

4、点击文本框时,复制文本框里面的内容

<input onclick="oCopy(this)" value="你好.要copy的内容!"><script language="javascript">function oCopy(obj){obj.select();js=obj.createTextRange();js.execCommand("Copy")alert("复制成功!");}</script>

5、复制文本框或者隐藏域中的内容

<script language="javascript">function CopyUrl(target){target.value=myimg.value;target.select();js=myimg.createTextRange();js.execCommand("Copy");alert("复制成功!");}function AddImg(target){target.value="[IMG]"+myimg.value+"[/ img]";target.select();js=target.createTextRange();js.execCommand("Copy");alert("复制成功!");}</script>

6.复制 span 标记中的内容

<script type="text/javascript"></script><br /><br /><script type="text/javascript">function copyText(obj){var rng = document.body.createTextRange();rng.moveToElementText(obj);rng.scrollIntoView();rng.select();rng.execCommand("Copy");rng.collapse(false);alert("复制成功!");}</script>

7.浏览器兼容 copyToClipboard("拷贝内容")

function copyToClipboard(txt) {if (window.clipboardData) {window.clipboardData.clearData();clipboardData.setData("Text", txt);alert("复制成功!");} else if (navigator.userAgent.indexOf("Opera") != -1) {window.location = txt;} else if (scape) {try {netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");} catch (e) {alert("被浏览器拒绝!\n请在浏览器地址栏输入'about:config'并回车\n然后将 'signed.applets.codebase_principal_support'设置为'true'");}var clip = Components.classes['@/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);if (!clip)return;var trans = Components.classes['@/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);if (!trans)return;trans.addDataFlavor("text/unicode");var str = new Object();var len = new Object();var str = Components.classes["@/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);var copytext = txt;str.data = copytext;trans.setTransferData("text/unicode", str, copytext.length * 2);var clipid = Components.interfaces.nsIClipboard;if (!clip)return false;clip.setData(trans, null, clipid.kGlobalClipboard);alert("复制成功!");}}

8.兼容各大浏览器的复制代码(结合ZeroClipboard.js)

<html><head><title>Zero Clipboard Test</title><script type="text/javascript" src="ZeroClipboard.js"></script><script language="JavaScript">var clip = null;function $(id) { return document.getElementById(id); }function init() {clip = new ZeroClipboard.Client();clip.setHandCursor(true); clip.addEventListener('mouseOver', function (client) {// update the text on mouse over clip.setText( $('fe_text').value );});clip.addEventListener('complete', function (client, text) {//debugstr("Copied text to clipboard: " + text ); alert("该地址已经复制,你可以使用Ctrl+V 粘贴。");});clip.glue('clip_button', 'clip_container' );}</script></head><body onLoad="init()"><input id="fe_text" cols=50 rows=5 value=复制内容文本1 ><span id="clip_container"><span id="clip_button"><b>复制</b></span></span></body></html

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。