用JS实现复制内容到剪切板,兼容PC和手机端,支持SAFARI浏览器的方法
javascript原生有一些事件:copy、paste、cut,
这些事件可以作用的目标元素:
能获得焦点的元素 (如contenteditable内容能编辑或者可以选中的元素),或者是<body>
<p id="cardlist">
<p class="btn">点击我,复制我</p>
</p>
<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>-->
<p style="margin:2em">
<textarea id="id_text"></textarea>
<button type="button" id="id_copy"
data-clipboard-target="#id_text"
data-clipboard-action="copy">点击复制
</button>
</p>
<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="https://www.w3.org/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 (window.netscape) {
try {
netscape.security.privilegemanager.enableprivilege("universalxpconnect");
} catch (e) {
alert("被浏览器拒绝!\n请在浏览器地址栏输入'about:config'并回车\n然后将 'signed.applets.codebase_principal_support'设置为'true'");
}
var clip = components.classes['@mozilla.org/widget/clipboard;1'].createinstance(components.interfaces.nsiclipboard);
if (!clip)
return;
var trans = components.classes['@mozilla.org/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["@mozilla.org/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
上一篇: Oracle CBO优化模式中的5种索引访问方法浅析
下一篇: 如何用CSS维护修改网页方便