跨浏览器开发经验总结(四) 怎么写入剪贴板


Posted in Javascript onMay 13, 2010

IE、 Firefox可以支持JavaScript往剪贴板写入内容
IE可以很方便的支持剪贴板内容写入命令,可以使用execCommand(),也可以利用window.clipboardData。

使用execCommand,需要先从页面选中要复制到剪贴板的内容,如以下代码:

var doc = obj.createTextRange(); 
doc.select(); 
doc.execCommand('copy');

使用window.clipboardData的方法如下,代码中同时实现了Firefox下写入剪贴板的功能:
if(window.clipboardData) //IE 
{ 
window.clipboardData.clearData(); 
window.clipboardData.setData("Text", txt); 
} 
else if (window.netscape) 
{ 
try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); 
} 
catch (e) 
{ 
alert("please visit 'about:config' and set signed.applets.codebase_principal_support as 'true'"); 
//提示用户开放浏览器的安全性设置 
} var clip = Components.classes["@mozilla.org/widget/clipboard;1"].createInstance(Components.interfaces.nsIClipboard); 
if (!clip) 
return; 
var trans = Components.classes["@mozilla.org/widget/transferable;1"].createInstance(Components.interfaces.nsITransferable); 
if (!trans) 
return; 
trans.addDataFlavor('text/unicode'); 
var str = new Object(); 
var len = new Object(); 
var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString); 
var copytext = txt; 
str.data = copytext; 



 trans.setTransferData("text/unicode",str,copytext.length*2); 
var clipid = Components.interfaces.nsIClipboard; 
if (!clip) 
return; 



 clip.setData(trans,null,clipid.kGlobalClipboard); 
}

以上代码可以实现在IE、Firefox中往剪贴版写入自定义内容,但是opera和webkit内核浏览器对安全性要求更高,不支持这种javascript直接操作剪贴板内容的方式,只能通过别的脚本语言“曲线救国”了。

Opera 、Safari、Chrome使用ActionScript往剪贴板写入内容

具体的实现可以将原本的动作按钮用flex或flash实现其外观,替换原来的图片或文字按钮,然后在点击该按钮时,执行以下ActionScript脚本:

//从浏览器环境中获得需要写入到剪贴板的内容

var s:String = String(ExternalInterface.call("getURL4Clipboard")); //getURL4Clipboard是页面上return剪贴板内容的javascript方法

//设置剪贴板内容

System.setClipboard(s);

//调用完成设置剪贴板内容后需要继续的JavaScript函数,比如提示用户信息等

ExternalInterface.call("copyURLCompleted"); //copyURLCompleted是页面上的javascript方法,继续执行复制后的工作

Javascript 相关文章推荐
javascript 对象比较实现代码
Apr 27 Javascript
jQuery一步一步实现跨浏览器的可编辑表格,支持IE、Firefox、Safari、Chrome、Opera
Aug 28 Javascript
jQuery中事件对象e的事件冒泡用法示例介绍
Apr 25 Javascript
JS清除选择内容的方法
Jan 29 Javascript
利用纯Vue.js构建Bootstrap组件
Nov 03 Javascript
webpack2.0配置postcss-loader的方法
Aug 17 Javascript
js实现数组和对象的深浅拷贝
Sep 30 Javascript
React Native基础入门之初步使用Flexbox布局
Jul 02 Javascript
JS删除String里某个字符的方法
Jan 06 Javascript
使用express来代理服务的方法
Jun 21 Javascript
微信小程序纯文本实现@功能
Apr 08 Javascript
基于原生js实现判断元素是否有指定class名
Jul 11 Javascript
跨浏览器开发经验总结(三)   警惕“IE依赖综合症”
May 13 #Javascript
JavaScript prototype属性使用说明
May 13 #Javascript
js 实现复制到粘贴板的功能代码
May 13 #Javascript
js href的用法
May 13 #Javascript
解决IE下select标签innerHTML插入option的BUG(兼容IE,FF,Opera,Chrome,Safari)
May 13 #Javascript
Js 随机数产生6位数字
May 13 #Javascript
js实现兼容IE6与IE7的DIV高度
May 13 #Javascript
You might like
农民和部队如何穿矿
2020/03/04 星际争霸
PHP实现读取一个1G的文件大小
2013/08/24 PHP
PHP单例模式定义与使用实例详解
2017/02/06 PHP
php可变长参数处理函数详解
2017/02/22 PHP
枚举JavaScript对象的函数
2006/12/22 Javascript
关于include标签导致js路径找不到的问题分析及解决
2013/07/09 Javascript
JS性能优化笔记搜索整理
2013/08/21 Javascript
可自定义速度的js图片无缝滚动示例分享
2014/01/20 Javascript
JavaScript函数详解
2015/02/27 Javascript
jQuery点击改变class并toggle及toggleClass()方法定义用法
2015/12/11 Javascript
jQuery模仿阿里云购买服务器选择购买时间长度的代码
2016/04/29 Javascript
浅谈js中test()函数在正则中的使用
2016/08/19 Javascript
AnjularJS中$scope和$rootScope的区别小结
2016/09/18 Javascript
JavaScript原生编写《飞机大战坦克》游戏完整实例
2017/01/04 Javascript
JavaScript比较两个数组的内容是否相同(推荐)
2017/05/02 Javascript
ajax前台后台跨域请求处理方式
2018/02/08 Javascript
解决echarts echarts数据动态更新和dataZoom被重置问题
2020/07/20 Javascript
对于Python的框架中一些会话程序的管理
2015/04/20 Python
整理Python中的赋值运算符
2015/05/13 Python
Python基于列表模拟堆栈和队列功能示例
2018/01/05 Python
python实现pdf转换成word/txt纯文本文件
2018/06/07 Python
python3解析库pyquery的深入讲解
2018/06/26 Python
使用Python生成200个激活码的实现方法
2019/11/22 Python
对python中return与yield的区别详解
2020/03/12 Python
什么是TCP/IP
2014/07/27 面试题
Java的类与C++的类有什么不同
2014/01/18 面试题
普通员工辞职信
2014/01/17 职场文书
动漫专业高职生职业生涯规划书
2014/02/15 职场文书
乡镇总工会学雷锋活动总结
2014/03/01 职场文书
法院先进个人事迹材料
2014/05/04 职场文书
博士生导师推荐信
2014/07/08 职场文书
小学体育组工作总结
2015/08/13 职场文书
详解Python小数据池和代码块缓存机制
2021/04/07 Python
opencv检测动态物体的实现
2021/07/21 Python
Kubernetes控制节点的部署
2022/04/01 Servers
MySQL8.0 Undo Tablespace管理详解
2022/06/16 MySQL