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