兼容主流浏览器的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使用中为什么10..toString()正常而10.toString()出错呢
Jan 11 Javascript
JS实现QQ图片一闪一闪的效果小例子
Jul 31 Javascript
javascript禁用键盘功能键让右击及其他键无效
Oct 09 Javascript
jQuery异步获取json数据方法汇总
Dec 22 Javascript
jQuery简单tab切换效果实现方法
Apr 08 Javascript
js+css实现回到顶部按钮(back to top)
Mar 02 Javascript
简述Matlab中size()函数的用法
Mar 20 Javascript
js+html5实现canvas绘制椭圆形图案的方法
May 21 Javascript
Vue2.0 组件传值通讯的示例代码
Aug 01 Javascript
微信小程序 转发功能的实现
Aug 04 Javascript
JS实现的数组去除重复数据算法小结
Nov 17 Javascript
详解vue 2.6 中 slot 的新用法
Jul 09 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
ecshop 2.72如何修改后台访问地址
2015/03/03 PHP
改变状态栏文字的js代码
2014/06/13 Javascript
JS实现的用来对比两个用指定分隔符分割的字符串是否相同
2014/09/19 Javascript
PHP中使用微秒计算脚本执行时间例子
2014/11/19 Javascript
javascript制作坦克大战全纪录(1)
2014/11/27 Javascript
JS实现往下不断流动网页背景的方法
2015/02/27 Javascript
jquery马赛克拼接翻转效果代码分享
2015/08/24 Javascript
JS实现DIV容器赋值的方法
2015/12/14 Javascript
javascript自动恢复文本框点击清除后的默认文本
2016/01/12 Javascript
基于BootStarp的Dailog
2016/04/28 Javascript
轻松5句话解决JavaScript的作用域
2016/07/15 Javascript
js实现的页面加载完毕之前loading提示效果完整示例【附demo源码下载】
2016/08/02 Javascript
简单实现js浮动框
2016/12/13 Javascript
如何学JavaScript?前辈的经验之谈
2016/12/28 Javascript
一道面试题引发的对javascript类型转换的思考
2017/03/06 Javascript
JavaScript初学者必看“new”
2017/06/12 Javascript
解读ES6中class关键字
2017/11/20 Javascript
JS计算输出100元钱买100只鸡问题的解决方法
2018/01/04 Javascript
解决vue的 v-for 循环中图片加载路径问题
2018/09/03 Javascript
原生JS实现动态加载js文件并在加载成功后执行回调函数的方法
2020/12/30 Javascript
小程序跨页面交互的作用与方法详解
2020/01/07 Javascript
原生js canvas实现鼠标跟随效果
2020/08/02 Javascript
nuxt 每个页面head标签内容设置方式
2020/11/05 Javascript
python dict.get()和dict['key']的区别详解
2016/06/30 Python
Python设置默认编码为utf8的方法
2016/07/01 Python
Python 12306抢火车票脚本
2018/02/07 Python
详解python数据结构和算法
2019/04/18 Python
使用Python的turtle模块画国旗
2019/09/24 Python
德国机车企业:FC-Moto
2017/10/27 全球购物
地球鞋加拿大官网:Earth Shoes Canada
2020/11/17 全球购物
2014年公司庆元旦活动方案
2014/03/05 职场文书
毕业生就业推荐表自我评价
2015/03/02 职场文书
《1942》观后感
2015/06/08 职场文书
人生遥控器观后感
2015/06/11 职场文书
500字作文之周记
2019/12/13 职场文书
MySQL中CURRENT_TIMESTAMP的使用方式
2021/11/27 MySQL