兼容主流浏览器的JS复制内容到剪贴板


Posted in Javascript onDecember 12, 2014

现在浏览器种类也越来越多,诸如 IE、Firefox、Chrome、Safari等等,因此现在要实现一个js复制内容到剪贴板的小功能就不是一件那么容易的事了。

在FLASH 9 时代,有一个通杀所有浏览器的js复制内容到剪贴板的方案

这个方案是一个最流行的方法: 著名的Clipboard Copy解决方案 利用一个clipboard.swf作为桥梁,复制内容到剪贴板。

原理是:创建一个隐藏的flash文件,同时给给flash的变量FlashVars 赋值“clipboard=..”,通过这个赋值flash就会把复制的内容放到剪贴板。这个方法兼容IE、Firefox、Opera、chrome、 Safari,真可谓“万能”的解决方案。浏览器Flash的安装率非常高,这几乎是一个完美的解决方案。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<title>Web开发者 - www.Admin10000.com </title>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<script type="text/javascript"> 

    var clipboardswfdata;

    var setcopy_gettext = function(){

        clipboardswfdata = document.getElementById('test_text').value;

        //alert(clipboardswfdata);

        window.document.clipboardswf.SetVariable('str', clipboardswfdata);

    }

    var floatwin = function(){

        alert('复制成功!');

        //document.getElementById('clipinner').style.display = 'none';

    }

</script>

</head>

<body>

<textarea id="test_text" rows="15" cols="100">文本?热?......</textarea>

<div id="clipboard_content"> 

  <div class="my_clip_button"><span class="clipinner" id="clipinner">复制代码到剪切板

    <embed name="clipboardswf" class="clipboardswf" id="clipboardswf" onmouseover="setcopy_gettext()" devicefont="false" src="./_clipboard.swf" menu="false" allowscriptaccess="sameDomain" swliveconnect="true" wmode="transparent" type="application/x-shockwave-flash" height="20" width="100">

    </span>

  </div> 

</div>

</body>

</html>

clipboard.swf 的下载地址:http://www.jeffothy.com/weblog/uploads/clipboard.php

但是 Flash 10 时代,上面的方法已经不行了。

因为flash10中规定了只有在swf上进行了真实的操作(比如鼠标点击)才能访问剪切板,而上述方法只是使用了一个隐藏的swf文件,通过javascript操作flash的剪贴板,用户并没有对swf文件进行真实的操作,因此这个方法也就失效了。

那么如何解决这个“真实操作”的问题呢?可以使用一个JavaScript库:Zero Clipboard,利用这个js库可以支持利用flash 10 实现复制到剪贴板。这个方法原理是在一个透明的flash(对用户来说是不可见的)上覆盖一个dom元素比如button或div,当点击这个dom时,实际点击的是flash,从而访问flash的剪贴板。

 以下是调试好的例子:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<title>Zero Clipboard Test</title>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<script type="text/javascript" src="ZeroClipboard.js"></script>

<script type="text/javaScript">

  var clip = null;  

  function $(id) { return document.getElementById(id); }  

  function init() {

    clip = new ZeroClipboard.Client();

    clip.setHandCursor(true);   

    clip.addEventListener('mouseOver', function (client) {

    // update the text on mouse over

    clip.setText( $('fe_text').value );

    });

     

    clip.addEventListener('complete', function (client, text) {

    //debugstr("Copied text to clipboard: " + text );

    alert("该地址已经复制,你可以使用Ctrl+V 粘贴。");

    });

 

    clip.glue('clip_button', 'clip_container' );

  }

</script>

</head>

<body onLoad="init()">

<input id="fe_text" cols="50" rows="5" value="复制内容文本">

<span id="clip_container"><span id="clip_button"><strong>复制</strong></span></span>

</body>

</html>

点击下载该类库: https://3water.com/jiaoben/24961.html

调试时请上传到网站,本地直接打开flash会出错的,没权限。zeroClipboard.js文件里moviePath属性是falsh的地址,就是目录下的那个ZeroClipboard.swf存放的地址位置。

这种js复制内容到剪贴板的方案可支持浏览器:Firefox / IE / opera / chorme / safari 所有浏览器!

Javascript 相关文章推荐
javascript 获取所有id中包含某关键字的控件的实现代码
Nov 25 Javascript
超简单JS二级、多级联动的简单实例
Feb 18 Javascript
jquery通过ajax加载一段文本内容的方法
Jan 15 Javascript
jQuery+Ajax实现无刷新分页
Oct 30 Javascript
微信小程序 新建登录页并实现tabBar隐藏
Jun 13 Javascript
微信小程序 同步请求授权的详解
Aug 04 Javascript
微信小程序实现给嵌套template模板传递数据的方式总结
Dec 18 Javascript
微信小程序scroll-view组件实现滚动动画
Jan 31 Javascript
js中事件对象和事件委托的介绍
Jan 21 Javascript
element-ui多文件上传的实现示例
Apr 10 Javascript
VUE 实现复制内容到剪贴板的两种方法
Apr 24 Javascript
vue-cli随机生成port源码的方法
Sep 02 Javascript
Javascript模拟加速运动与减速运动代码分享
Dec 11 #Javascript
javascript中HTMLDOM操作详解
Dec 11 #Javascript
javascript实现修改微信分享的标题内容等
Dec 11 #Javascript
javascript表单验证和Window详解
Dec 11 #Javascript
使用百度地图api实现根据地址查询经纬度
Dec 11 #Javascript
javascript实现倒计时N秒后网页自动跳转代码
Dec 11 #Javascript
node.js中的buffer.Buffer.byteLength方法使用说明
Dec 10 #Javascript
You might like
PHP与MySQL交互使用详解
2006/10/09 PHP
php中的数组操作函数整理
2008/08/18 PHP
解决file_get_contents无法请求https连接的方法
2013/12/17 PHP
一个好用的PHP验证码类实例分享
2013/12/27 PHP
php+js iframe实现上传头像界面无跳转
2014/04/29 PHP
php输出全球各个时区列表的方法
2015/03/31 PHP
Yii2.0框架模型多表关联查询示例
2019/07/18 PHP
设定php简写功能的方法
2019/11/28 PHP
Apache+PHP+MySQL搭建PHP开发环境图文教程
2020/08/06 PHP
Apache站点配置SSL强制跳转443
2021/03/09 Servers
一个报数游戏js版(约瑟夫环问题)
2010/08/05 Javascript
jquery.post用法关于type设置问题补充
2014/01/03 Javascript
jquery遍历checkbox的注意事项说明
2014/02/21 Javascript
js实现canvas保存图片为png格式并下载到本地的方法
2017/08/31 Javascript
基于jQuery ztree实现表格风格的树状结构
2018/08/31 jQuery
解决ng-repeat产生的ng-model中取不到值的问题
2018/10/02 Javascript
详解vue-element Tree树形控件填坑路
2019/03/26 Javascript
[42:36]DOTA2上海特级锦标赛B组败者赛 VG VS Spirit第二局
2016/02/26 DOTA
Python HTMLParser模块解析html获取url实例
2015/04/08 Python
Python运算符重载详解及实例代码
2017/03/07 Python
详解django自定义中间件处理
2018/11/21 Python
pytorch permute维度转换方法
2018/12/14 Python
django settings.py 配置文件及介绍
2019/07/15 Python
python 多进程共享全局变量之Manager()详解
2019/08/15 Python
pycharm双击无响应(打不开问题解决办法)
2020/01/10 Python
举例讲解Python装饰器
2020/12/24 Python
GE设备配件:GE Appliance Parts(家电零件、配件和滤水器)
2018/11/28 全球购物
怎么写好自荐信
2013/10/30 职场文书
《千年梦圆在今朝》教学反思
2014/02/24 职场文书
成龙洗发水广告词
2014/03/14 职场文书
大专生找工作自荐书
2014/06/10 职场文书
入党积极分子十八届四中全会思想汇报
2014/10/23 职场文书
八项规定自查自纠报告及整改措施
2014/10/26 职场文书
安全生产工作汇报
2014/10/28 职场文书
2015教师年度思想工作总结
2015/04/30 职场文书
《西游记》读后感(3篇)
2019/09/20 职场文书