js点击按钮复制带有名称的链接到剪贴板

  1. 记录使用clipboard.js实现点击复制链接到剪切板的历程里面所有方式只支持复制链接,不支持复制带有名称的链接
  2. 根据chrome-extension:Copy with URL(将复制的选中文字转变为超链接文本)文档的描述,改成如下:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>function-target</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
    <!-- 1. Define some markup -->
    <button onclick="copyUrlToClipboard('百度','https://www.baidu.com/')">Copy</button>
	
    <!-- 2. Include library -->
    <script src="clipboard.min.js"></script>

    <!-- 3. Instantiate clipboard -->
    <script>
	
        /**
         * 复制超链接到粘贴板
         * @param
         *    showUrlName 超链接名称
         *    url  超链接地址
         */
	function copyUrlToClipboard(showUrlName,url) {
		var copyFrom, agent, body;

                    //创建超链接<a id="target" herf=url target="_blank">showUrlName</a>
                    copyFrom = document.createElement("a");
                    copyFrom.setAttribute("id", "target");
                    copyFrom.setAttribute("target", "_blank");
                    copyFrom.setAttribute("href", url);
                    copyFrom.innerHTML = showUrlName;
                    //创建按钮
                    agent = document.createElement("button");
                    //获取body
                    body = document.getElementsByTagName('body')[0];
                    //body增加超链接
                    body.appendChild(copyFrom);
                    //body增加按钮
                    body.appendChild(agent);   // 采用Clipboard.js方案 // trouble:没有可以传入的HTML元素,但我们可以动态创建一个DOM对象作为代理,复制超链接
                    var clipboard = new ClipboardJS(agent, {
                        target: function() {
                            return document.querySelector('#target');
                        }
                    });

                    clipboard.on('success', function(e) {
                        alert("复制成功");
                    });

                    clipboard.on('error', function(e) {
                        alert("复制失败");
                    });
                    //点击按钮
                    agent.click();
                    // copyFrom.focus();
                    // copyFrom.select();  // 问题所在 无法对copyFrom对象使用select()方法
                    // document.execCommand('copy'); // copy动态创建的<a>失败
                    //移除创建的元素 
                    body.removeChild(copyFrom);
                    body.removeChild(agent);
	}
    </script>
</body>
</html>

效果

1.Uncaught TypeError: Cannot set property action of #<e> which has only a getter

我在自己项目中报如下错误:在这里插入图片描述
后来经过前端同事查看,发现是项目中重写了Object.defineProperty,导致clipboard里的set方法没有起作用,赋值时报错了。
globalbasis.js
然后前端同事对clipboard.js进行优化,就解决了上面的问题。

  1. 使用onload,在点击按钮后,报复制失败。原因:document.execCommand() 踩了个坑
var newscript = document.createElement('script');
newscript.setAttribute('type','text/javascript');
newscript.setAttribute('src','clipboard.min.js');
document.getElementsByTagName('head')[0].appendChild(newscript); 

newscript.onload=function(){
     var clipboard = new ClipboardJS(agent, {
     target: function() {
       return document.querySelector('#target');
     }
   });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值