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

.bl { padding: 5px 10px; border-left: 3px solid #009a61; background: #f6f6f6; color: #555; font-size: 1em }
.bottom-line { border-bottom: 2px solid #009a61; padding-bottom: 8px }

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

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

方案一:zeroClipboard.js

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

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

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

HTML

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

JAVASCRIPT

	(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

 官网地址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,可以通过如下代码提示用户手动复制:

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

Safari版本在10以下的效果:

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

效果如下:

DEMO:

 

HTML:

   <!-- Target -->
    <input id="foo"  value="http://www.968309.com/mobile.php">

    <!-- Trigger -->
    <button class="btn" data-clipboard-target="#foo">复制</button>

JAVASCRIPT:

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

  

时间: 2024-10-23 13:54:44

Clipboard.js : 移动端浏览器实现网页内容复制的相关文章

使用clipboard.js复制页面内容到剪切板

最近在做一个的智能客服Web端浏览器应用,其中有一项需求是客户在获取系统返回的 答案后点击“复制答案”按钮将答案复制到系统剪切板.本以为这是一个小case,但是发现如果 要对各种主流浏览器都有良好的兼容性并不简单.原因在于出于安全原因,大多数现代浏览 器都未提供通用的剪贴板复制接口(或即便有,也默认被禁用). 上网搜索了一下,现有的方案大致有两种: 一:使用原生javascript中window.clipboardData实现复制到剪贴板功能: 二:使用Zero Clipboard库: 在尝试了

记录使用clipboard.js实现点击复制链接到剪切板的历程

记录使用clipboard.js实现点击复制链接到剪切板的历程 前几天接到一个任务,让实现当用户在首页点击按钮(说是按钮,只是外观是按钮,其实是一个a标签)时弹出弹窗告诉用户已经复制了活动链接,同时将链接复制到用户的剪切板中. 听起来贼简单的功能,分任务的时候甚至有人说就1,2行代码就搞定了.于是这简单的任务就给了我(菜鸟实习生  =-=),我真是信了你的邪~~!. 在我做的时候,才发现,听起来挺简单的任务,但是如果要实现对不同浏览器兼容,其实并不简单. 列举一下我找到的各种实现方法吧: 1.d

JS pc端和移动端共同实现复制到剪贴板功能实现

JS pc端和移动端实现复制到剪贴板功能实现 在网页上复制文本到剪切板,一般是使用JS+Flash结合的方法,网上有很多相关文章介绍.随着 HTML5 技术的发展,Flash 已经在很多场合不适用了,甚至被屏蔽.本文介绍的一款JS插件,实现了纯JS方法复制文本到剪切板. 插件名是Clipboard.js,该插件不依赖 Flash,而是依赖于最新HTML5推出 Selection API 和 execCommand API. Github:https://github.com/zenorocha/

js实现复制隐藏域的内容 —— clipboard.js

起初是使用浏览器提供了 copy 命令 . document.execCommand("copy") 如果是输入框,可以通过 select() 方法,选中输入框的文本,然后调用  copy 命令,将文本复制到剪切板.但是 select() 方法只对 <input> 和 <textarea> 有效,对于 <p> 就不好用了 function copyUrl() { $("#copyinput").select(); // 选择对象

js实现剪切、复制、粘贴——clipBoard.js

摘要: 最近项目上要实现一个点击按钮复制链接的功能,刚开始查找了一些资料,找了几款插件,ZeroClipboard是通过flash实现的复制功能,随着越来越多的提议废除flash,于是就想能不能通过js来实现复制剪切呢? 地址:https://github.com/baixuexiyang/clipBoard.js 方法: 复制 var copy = new clipBoard(document.getElementById('data'), { beforeCopy: function() {

clipboard.js在弹出框中无法复制的问题

前几天发现了个bug,在jquery-ui的弹出框(dialog)中,使用clipboard.js实现的复制功能,竟然不会生效,后面查了下相关资料,发现不止jquery-ui的dialog不行,其他的模态框,例如bootstrap的,也是一样不会生效的.原因就是弹出框会自动focus,而复制的底层实现是要获取选中的内容,失去焦点后就无法获取到了,从而导致复制失败. 解决办法: 1)对于 Bootstrap 模态框(Modals)中使用,或是在其他修改焦点的类库中使用,你会希望将获得焦点的元素设置

Clipboard.js实现复制

Clipboard.js实现文本复制或者剪切到剪切板 引用js文件 <script type="text/javascript" src="./dist/clipboard.min.js"></script> 使用一 <!-- Target --> <input id="foo" value="https://github.com/zenorocha/clipboard.js.git"

Clipboard.js实现复制内容到剪切板

<script type="text/javascript"> var clipboard1 = new Clipboard('.bt01'); clipboard1.on('success', function (e) { alert("Copy Url Success!"); e.clearSelection(); }); </script> <div class="mt5"><img src=&qu

Vue使用Clipboard.JS在h5页面中复制内容

安装clipboard.js github路径:https://github.com/zenorocha/clipboard.js 安装: npm install clipboard --save 引入clipboard.js import ClipboardJS from "clipboard"; 原文地址:https://www.cnblogs.com/cowboybusy/p/11452930.html