execCommand替代方案Clipboard,实现JS复制到剪贴板

本文介绍两种网页内容复制的方法:使用execCommand直接操作浏览器命令及利用Clipboard API实现更安全的复制功能。Clipboard API需要在安全上下文中运行,如HTTPS环境下,并且通常在用户交互事件中触发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、execCommand实现方式

$("#buttonId").click(function(){
    var input = document.createElement("input");
    input.value = E_CARD_NO;
    document.body.appendChild(input);
    input.select();
    input.setSelectionRange(0, input.value.length);
    document.execCommand('Copy');
    document.body.removeChild(input);
    alert("复制成功!");
});

2、Clipboard实现方式

         如果你把上面的代码,粘贴到F12开发者工具里面运行,就会报错。因为代码运行的时候,开发者工具窗口是当前页,这个页面不存在 Clipboard API 依赖的 DOM 接口。一个解决方法就是,相关代码放到setTimeout()里面延迟运行,在调用函数之前快速点击浏览器的页面窗口,将其变成当前页。

settimeout(function(){
	navigator.clipboard.writeText("<empty clipboard>").then(function() {
	  /* clipboard successfully set */
	}, function() {
	  /* clipboard write failed */
	});
}, 3000);

        ios必须在点击事件中显示触发,并且需要https等安全上下文

//正确写法,输出“复制成功”
$("#buttonId").click(function(){
	// navigator clipboard 需要https等安全上下文
	if (navigator.clipboard && window.isSecureContext) {
		// navigator clipboard 向剪贴板写文本
		navigator.clipboard.writeText("aaaaa").then(function() {
	        alert("复制成功");
	    }, function() {
	        alert("复制失败");
	    });
	}
});

//错误写法,输出“复制失败”
window.onload=function(){
    navigator.clipboard.writeText("aaaaa").then(function() {
	    alert("复制成功");
	}, function() {
	   alert("复制失败");
	});
}

//错误写法,输出“复制失败”
$("#buttonId").click(function(){
    settimeout(function(){
        navigator.clipboard.writeText("aaaaa").then(function() {
	        alert("复制成功");
	    }, function() {
	       alert("复制失败");
	    });
    },1000);
})

         其他可以参考阮一峰大神:https://www.ruanyifeng.com/blog/2021/01/clipboard-api.html

         官方API文档: Clipboard - Web APIs | MDN

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值