跨浏览器使用剪贴板
作者:realazy 来源:realazy 发布时间:2008-09-27 13:26:00
标签:浏览器,剪贴板,JavaScript
一般情况下,访问或设置剪贴板,IE 只需使用 window.clipboardData
的 getData
或 setData
方法即可。Mozilla 家族的浏览器(如 Firefox)则比较麻烦,不仅开发者需要写一沱代码,用户也需要主动配合(就是需要设置允许访问剪贴板)才可以(参考 Using the Clipboard),以致几不可用。至于 Opera 则根本不提供剪贴板,Safari 可以在 onpaste 等非Dom 事件中访问剪贴板(参考 Using the Pasteboard From JavaScript)。
中国特色的网站上有一个很中国特色的应用就是,在一个输入框 focus 时自动帮你把内容复制到了剪贴板中。老实说访问剪贴板是个不安全的操作,因此即使是 IE, Windows 在后来的升级中都加入是否允许访问剪贴板的提醒。如果能够做到跨浏览器的“ * 地悄无声息”地实现中国特色的剪贴板应用,确实是个不小的挑战。
遗憾的是老外在 2006 年就帮我们做到了:使用 Flash。参考 Clipboard Copy. 原版没有考虑不安转或禁止 Flash 的情况,我做了一个小改进:
function copy(inElement) {
var get = function(id){
return document.getElementById(id);
},
elId = 'flashcopier',
embedId = 'flashembed';
if(!get(elId)) {
var divholder = Document.createElement('div');
divholder.setAttribute('id', elId);
document.body.appendChild(divholder);
}
var divholder = get(elId);
divholder.innerHTML = '<embed src="http://static.hainei.com/swf/cp.swf"\
FlashVars="clipboard='+encodeURIComponent(inElement.value)+'"\
width="0" height="0" type="application/x-shockwave-flash"\
id="'+embedId+'"></embed>';
// 检测是否安装了 Flash
var flashObj = window[embedId] || document[embedId] || {};
if (!flashObj.SetVariable){// 没有 flash
try {
return window.clipboardData.setData("Text", inElement.value);
}
catch(ex){
return false;
}
}
return true;
}
原版是 GPL 的,这个版本也请爱咋咋用……
0
投稿
猜你喜欢
- 八月的UCDChina书友会主题是“信息分类和方法”,在会场中的内容是不足以简单的概述的,而这次交流至少对于分类、属性、关键词与Tag的定义
- 作者:Dmitry @ Usability Post 版权所有 Copyright.译者:明月星光 @ UCD翻译小组原文:ht
- 我和朋友对此的看法有分歧,我明明记得有不需要返回的时候的?你的看法是对的,例如在表中删除记录。我们来看看下面的例子——在Employee表中
- jscript 5.7 发布修复了不少ie javascript内存泄露的问题。但是leak依然存在。当我们频繁使用 setInterval
- 数字函数 ABS():求绝对值。 CEILING():舍入到最大整数。 FLOOR():舍入到最小整数。 ROUND():四舍五入 ROUN
- Brendan Eich于1995年在Netscape发明了JavaScript语言,这个语言在过去的一些年里曾是一个最被误解的语言,随着A
- MySQL 5.0.16的乱码问题可以用下面的方法解决:1.设置phpMyAdminLanguage:Chinese simplified
- 论坛上看到有人问ASP是否可以定时触发事件,我就顺便做了一个玩玩。其实做这个的原理是很简单的,只是我们当时没有仔细的去想想该怎么实现,我这里
- 问题:SQL Server 2005中如何利用xml拆分字符串序列?解答:下文中介绍的方法比替换为select union all方法更为见
- default-character-set=gbk #或gb2312,big5,utf8 然后重新启动mysql 运行->servic
- 如何在刷新链接之前验证文件是否存在?如何在每次刷新链接之前,验证链接文件是否确实存在?特别是对于数据库中的文件,我们必须在处理它之前确认一下
- 有这么一个题目,说bt其实也不bt,为了重点突出其中的意图,特意加上了括号:var a = (++Math.P
- 以下插件是我在项目中经常使用的jQuery插件,不见得是最好的,但是我目前接触到的jQuery插件中最适合我的。01. jQuery.Fle
- 我刚进入5gsns的时候,我真不知道怎么玩,我是通过白鸦的博客过去的,之前也没有怎么去玩过这类的网站。对于sns网站还算是陌生,不过还好网站
- 1、删除Oracal在注册表中的主项:regedit.exe->LocalMachine->Software->Oracl
- 在进行CSS网页布局开发时,您肯定遇到过形形色色的布局问题,虽然有大量的教程提供帮助,但最后可能被搞得焦头烂额。本文的目的是让您的设计过程更
- 6、遮罩滤镜作用:该滤镜可以为对象建立一个覆盖于表面的膜,其效果就象戴着有色眼镜看物体一样。语法: {filter:mask(color=c
- 随着网站访问量的加大,每次从数据库读取都是以效率作为代价的,很多用ACCESS作数据库的更会深有体会,静态页加在搜索时,也会被优先考虑。互联
- 一、css样式表滤镜的构成 滤镜作为样式表大家庭中的一员,它跟其他样式表元素的定义和应用方式当然是一样的,能够直接定义在HTML标识的<
- MySQL由于它本身的小巧和操作的高效, 在数据库应用中越来越多的被采用.我在开发一个P2P应用的时候曾经使用MySQL来保存P2P节点,由