今天在給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。非常的簡單。