博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Clipboard.js : 移动端浏览器实现网页内容复制
阅读量:5810 次
发布时间:2019-06-18

本文共 2220 字,大约阅读时间需要 7 分钟。

最近在项目中遇到这样一个需求:

 

点击按钮,将指定的URL复制到剪贴板,然后用户可以粘贴到浏览器(Safari为主)自行打开。

 

方案一:zeroClipboard.js

 

 

github地址

 

复制原理:zeroClipboard利用透明的 flash 覆盖在复制按钮上,点击 flash,将复制内容传入到 flash 中,再通过 flash 把传入的内容写到剪贴板上

 

首先想到这个插件的原因是,之前在PC端的项目中使用过,兼容性很好,驾轻就熟,所以,先用它做了个demo

HTML

1
2
<
input 
type="text" name="" id="iUrl" value="https://github.com/zeroclipboard/zeroclipboard">
<
button 
id="copyUrlBtn">复制链接</
button
>

 

JAVASCRIPT

1
2
3
4
5
6
7
8
9
10
11
(
function
(){
        
var 
btn = document.getElementById(
'copyUrlBtn'
),
        
text = document.getElementById(
'iUrl'
),
        
zc = 
new 
ZeroClipboard(btn);
    
zc.on(
'beforecopy'
function
(e){
        
zc.setText(text.value);
    
});
    
btn.onclick = 
function
(){
        
alert(
'已复制'
);
    
}
})();

 

使用zeroClipboard.js需要注意以下两点:

1# ZeroClipboard.swf 和 ZeroClipboard.min.js 需在同一目录结构下, ZeroClipboard.swf无需调用,只需在页面中引用ZeroClipboard.min.js 即可;

2# 测试复制功能需在服务器环境,可以是简单的本地服务器,如:http://localhost:8000/xx

 

测试结果:

在PC端浏览器上测试,功能正常;但是在ios上,无论是QQ浏览器,还是Safari浏览器都无法实现复制功能。

可能由于Flash技术正被各大浏览器厂商冷落,所以,截止到目前ZeroClipboard.js最新版,也无法实现在移动端浏览器进行文本复制。

 

方案二:Clipboard.js

 

 

 官网地址

 

 兼容性:

 虽然要求Safari版本在10以上,但是作者做了很好的优雅降级:

The good news is that clipboard.js gracefully degrades if you need to support older browsers. All you have to do is show a tooltip saying Copied! when success event is called and Press Ctrl+C to copy when error event is called because the text is already selected.

 

 也就是说,Safari版本是10以上的,可以直接成功复制;如果是版本小于10,可以通过如下代码提示用户手动复制:

1
2
3
clipboard.on(
'error'
function
(e) {
    
alert(
'请选择“拷贝”进行复制!'
)
});

 

Safari版本在10以下的效果:

在 alert('请选择“拷贝”进行复制!') 之后,待复制的文字会自动选中,然后弹出系统本身的tooltip 

效果如下:

 

 DEMO:

 

HTML:

1
2
3
4
5
<!-- Target -->
 
<
input 
id="foo"  value="http://www.968309.com/mobile.php">
 
 
<!-- Trigger -->
 
<
button 
class="btn" data-clipboard-target="#foo">复制</
button
>

 

JAVASCRIPT:

1
2
3
4
5
6
7
8
9
10
//init
var 
clipboard = 
new 
Clipboard(
'.btn'
);
//优雅降级:safari 版本号>=10,提示复制成功;否则提示需在文字选中后,手动选择“拷贝”进行复制
clipboard.on(
'success'
function
(e) {
    
alert(
'复制成功!'
)
    
e.clearSelection();
});
clipboard.on(
'error'
function
(e) {
    
alert(
'请选择“拷贝”进行复制!'
)
});

  

 

 2017/08/25 后续补充:

 

近期很多朋友通过留言和邮件询问我,为什么在安卓手机上无法使用Clipboard.js来实现复制?

其实按照本文demo说明,是完全可以的;

只是很多朋友没有没有把待复制内容放在input输入框里,才导致在安卓手机上无法复制。

 

错误写法:

1
<
p 
id="foo">这里是需要复制的文本</
p
>

  

正确写法:

1
<
input 
type="text" id="foo" value="这里是需要复制的文本"/>

转载地址:http://swjbx.baihongyu.com/

你可能感兴趣的文章
USB 通信原理
查看>>
7zZip zip RAR iOS
查看>>
date命令的详细用法!
查看>>
分布式存储ceph集群部署
查看>>
UiAutomator源码分析之UiAutomatorBridge框架
查看>>
python 开发之selenium
查看>>
Xcode3.2.5中找不到Mac OS X - Command Line Utility -...
查看>>
css的div垂直居中的方法,百分比div垂直居中
查看>>
如何理解EM算法
查看>>
nginx 域名跳转一例~~~(rewrite、proxy)
查看>>
linux用户家目录无损迁移到独立硬盘
查看>>
文件查找
查看>>
shell编程前言(一)
查看>>
5、centos7.*配置yum的EPEL源及其它源
查看>>
JSON前后台简单操作
查看>>
shell中一些常见的文件操作符
查看>>
CentOS 7 装vim遇到的问题和解决方法
查看>>
JavaScript基础教程1-20160612
查看>>
使用第三方类、库需要注意的正则类RegexKitLite的使用
查看>>
iOS \U7ea2 乱码 转换
查看>>