跨浏览器使用剪贴板
一般情况下,访问或设置剪贴板,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 的,这个版本也请爱咋咋用……

September 1st, 2008 at 16:56
这篇文章为啥子归类于web标准内?
September 1st, 2008 at 17:27
一直用google reader订阅,才发现懒人也改版。
September 1st, 2008 at 18:59
哇, 这个东西好哦..
很早就在找..
September 2nd, 2008 at 00:13
这也叫改进,
有window.clipboardData的话,在插入flash对象之前就直接调用了
还try呢,晕
September 2nd, 2008 at 10:05
@muqiao
直接使用 window.clipboardData 的话,会有恼人的安全提示,所以把它的等级次于有 Flash 的情况。另外,try 是避免没有 window.clipboardData 的浏览器出错(我觉得这比判断浏览器好)。
September 2nd, 2008 at 12:29
flash是好帮手呀,好多浏览器不能流畅实现的功能,都用它来实现了。:)
September 9th, 2008 at 10:14
迄今为止都只看到通过flash的解决办法~···
September 18th, 2008 at 10:17
>>访问剪贴板是个不安全的操作!
是非常不安全!想象一下,如果你上的每个网站都窃取了你剪贴板上的内容,日积月累,配合下搜索引擎,你想不泄漏个人隐私或者公司的机密都难。
就冲这个因素,也应该把访问剪贴板的功能从浏览器上去掉,包括这个已经流传很久的 flash 实现。
October 9th, 2008 at 15:33
Flash一直是补丁大户。
访问剪贴板是很危险,也很有用的功能,这是一把双刃剑。
注意安全的朋友可以在FF里装NoScript插件,它会屏蔽js脚本,flash等不安全因素,临时允许也很便捷,对于信任的网站,可以加到白名单。
其实我觉得主动访问剪贴板是一件很讨厌的事情,最好不要自作聪明,让用户控制自己的行为。也不要屏蔽浏览器右键菜单,可以使用功能按钮或左键菜单代替。
November 8th, 2008 at 15:27
Linux下面的Firefox试了试无效,有没有其他的办法呢?