目的:实现点击控件,剪切板自动复制本地链接到剪切板
1.碰到的问题
- 一开始以为简单的调用window方法就可以实现了
window.clipboardData.setData("Text",url);
- 结果(参考链接:js 剪切板的用法(clipboardData.setData))
2. 另辟蹊径
- 发现通过复制标签上的数值再赋值给剪切板是允许的
<input type="text" size="30" id="url" value="https://www.jb51.net/">
<input type="button" value="复制链接1" onClick="copyUrl()">
<script type="text/javascript">
function copyUrl(){
var url = document.getElementById("url").value;
window.clipboardData.setData("Text",url);
alert("复制链接成功!");
}
</script>
- 只能不得不选择别人写的js模拟实现这个功能(其实就是模拟一个类似隐含域的方法创建一个虚拟标签,然后赋值给虚拟标签,再获取标签的值再赋给剪切板,再清除掉这个虚拟标签)
<div class="item">
<a class="ui share"><i class="share icon"></i> <span>分享</span></a>
</div>
$('.ui.share').click(function () {
var detail = $(this).parents().find('input:last').val();
var url = window.location.href.replace("pre/main","resourceDetails/")+detail;
const el = document.createElement('textarea');
el.value = url;
el.setAttribute('readonly', '');
document.body.appendChild(el);
const selected =
document.getSelection().rangeCount > 0
? document.getSelection().getRangeAt(0)
: false;
el.select();
document.execCommand('copy');
document.body.removeChild(el);
if (selected) {
document.getSelection().removeAllRanges();
document.getSelection().addRange(selected);
}
alert("链接复制成功,可以分享链接给朋友们哎!!!");
});
- 效果
温馨提示:
有个博主这样说
input 标签里的值应该设置为只读,所以加了属性readonly。一开始我加了disabled,发现不能复制,后来查了,用readonly才能复制
然而我去掉了readonly 属性也是可以的