Clipboard.js : 移动端浏览器实现网页内容复制

news/2024/7/7 11:22:46 标签: javascript, php

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

 

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

 

方案一:zeroClipboard.js

 

 

github地址:https://github.com/zeroclipboard/zeroclipboard

 

复制原理: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

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

 

使用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

 

 

 官网地址:https://clipboardjs.com/

 

 兼容性:

 虽然要求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,可以通过如下代码提示用户手动复制:

javascript">
1
2
3
javascript plain">clipboard.on( javascript string">'error' javascript plain">,  javascript keyword">function javascript plain">(e) {
javascript spaces">     javascript plain">alert( javascript string">'请选择“拷贝”进行复制!' javascript plain">)
javascript plain">});

 

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:

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

  

 

 2017/08/25 后续补充:

 

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

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

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

 

错误写法:

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

  

正确写法:

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

http://www.niftyadmin.cn/n/1664051.html

相关文章

NIO学习一、NIO简介

最近在学习NIO,根据学习总结了一下&#xff0c;如果有不对的地方&#xff0c;请大佬指出。 一、NIO的简介 NIO&#xff0c;就是new io&#xff0c;从jdk 1.4开始引入的新的api&#xff0c;它跟IO的作用相同。它与传统的IO相比&#xff0c;有如下特性&#xff1a;1&#xff09;…

重构——44移除参数(Remove Parameter)

移除参数&#xff08;Remove Parameter&#xff09; 函数本体不再需要某个函数&#xff1b;将该参数去除 一、动机 不去掉多余的参数&#xff0c;就让用户多费一份心 二、做法 1、检查函数签名是否被超类或者子类实现&#xff0c;如果是&#xff0c;则需要针对每份实现分别进行…

GNU make manual 翻译(四)

继续翻译复制代码1.2 Problems and Bugs If you have problems with GNU make or think youve found a bug, please report it to the developers; we cannot promise to do anything but we might well want to fix it. Before reporting a bug, make sure yo…

重构——52隐藏函数(Hide Method)

隐藏函数&#xff08;Hide Method&#xff09; 有一个函数&#xff0c;从来没有被其它任何类用到&#xff1b;将这个函数改为private 一、动机 提高函数可见度容易&#xff0c;降低稍微困难一些 二、做法 1、经常检查有没有可能降低某个函数的可见度 2、尽可能降低所有函数的可…

添加web引用和添加服务引用有什么区别?

添加web引用和添加服务引用有什么区别, Add Service References 和 Add Web References 有啥区别? 参考 http://social.microsoft.com/Forums/zh-CN/xmlwebserviceszhchs/thread/808d870b-49f1-47ac-b105-4beb580bcec6 &#xff08;1&#xff09;VS2005里提供的Add Web Refere…

实时监控Cat之旅~对Get和Post进行封装,支持分布式消息树

对第三方接口的调用我们需要对GET和POST进行监控&#xff0c;看一些请求的执行是否成功&#xff0c;如A调用B&#xff0c;B调用C&#xff0c;C调用D&#xff0c;这一连串的东西需要我们使用cat进行记录&#xff0c;进行记录之后&#xff0c;我们可以很容易的发现请求响应的时间…

c语言基础学习01_c语言概述

每一种语言都有其独特的语法规则与语言定义。 指令是对计算机进行程序控制的最小单位。所有的指令的集合称为计算机的指令系统。 程序是为完成一项特定任务而用某种语言编写的一组指令序列。机器语言----->汇编语言----->高级语言010101 编译器 标识符 编译器 C语言、…

运维学python之爬虫基础篇(三)urllib模块高级用法

1 添加头信息 1.1 User-Agent 有些网站&#xff0c;如果你按照urllib.request.urlopen(https://www.baidu.com) 这种方式打开&#xff0c;服务器有可能不会响应&#xff0c;所以要完全模仿浏览器访问&#xff0c;我们需要加入User-Agent信息&#xff0c;示例代码如下&#xff1…