蓝色空间
简单的程序人生
posts - 11,comments - 70,trackbacks - 0

        今天在给blog添加代码着色的功能的时候发现SyntaxHighlighter项目中使用的复制代码功能的脚本如果浏览器不是IE的话是使用的一个flash实现的,而且还要在HighlightAll调用之前先写一句dp.SyntaxHighlighter.ClipboardSwf = 'xxxxxx',太麻烦了,google了一下发现也有纯javascript实现拷贝的方法。

function copyCode(id) {
 var txt=document.getElementById(id).innerText;
 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){ 
  txt=document.getElementById(id).textContent;
  try {  
   netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");  
  }  
  catch (e){  
   alert("!!被浏览器拒绝!\n请在浏览器地址栏输入’about:config’并回车\n然后将’signed.applets.codebase_principal_support’设置为’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 false;  
  clip.setData(trans,null,clipid.kGlobalClipboard);  
 }
 window.status="代码已被复制到剪贴板!Contents have copied to clipboard!"
 setTimeout("window.status=''",3600)
 return true;  
}
        参数id就是你想要拷贝其内容的div的id。非常的简单。
posted on 2008-02-29 14:38 ivin 阅读(377) 评论(0)  编辑  收藏 所属分类: JavaScript

只有注册用户登录后才能发表评论。


网站导航: