这个函数兼容了以上两种浏览器,其中IE又另外使用了一种方法,就是直接访问剪贴板。在火狐下则会弹出一个框,说这个操作不安全,所以我不推荐使用这种方式,因为这样会大大降低用户访问的友好性!
最好的方式就是我在‘工作旅程’这个分类中提到过的,用一个Flash与javascript进行交互,绕过了安全机制,至于怎样实现的,我也没有具体地研究了。在此补充一句,外国的程序员就是牛!总是能用我们想不到的方式去实现一个功能!向他们学习,致敬!
- copyClipboard=function (txt){
- if(window.clipboardData){
- window.clipboardData.clearData();
- window.clipboardData.setData("Text",txt);
- }else if(navigator.userAgent.indexOf("Opera")!=-1){
- window.location=txt;
- }else if(window.netscape){
- try{
- netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
- }catch(e){
- alert("您的firefox安全限制限制您进行剪贴板操作,请打开’about:config’将signed.applets.codebase_principal_support’设置为true’之后重试");
- return false;
- }
- 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 false;
- clip.setData(trans,null,clipid.kGlobalClipboard);
- }