作者: forest 時間: 2006-12-13 08:39 標題: 在線編輯器原理
看了現(xiàn)在網(wǎng)上流行的在線編輯器,也忍不住想了解一下原理.下了目前應用最廣泛的eWebEdit,這個是我見到的最強的開源在線編輯器...研究了一天,終于知道了核心原理. 先解釋一下在線編輯器的原理:首先需要IE5.0以上版本的支持.因為IE5.0以上版本有一個編輯狀態(tài),可以在一個iframe里面輸入文字.然后通過 "document.body.innerHTML"可以獲取iframe里面的html代碼.這個就是關(guān)鍵。那怎么才能讓ifrmae處于編輯狀態(tài)呢,可以用 function document.onreadystatechange() { HtmlEdit.document.designMode="On"; } 函數(shù)實現(xiàn). 剩下的問題就是就是取得焦點和選種的值. HtmlEdit.focus(); var sel = HtmlEdit.document.selection.createRange(); 以上2句可以獲取選種的植的html代碼.到了這里,基本原理搞清楚了,然后我們可以用 insertHTML("str")方法將html字符替換掉選種的值.以下就給出一個簡單的demo來演示只有加粗效果的在線編輯器.我這里用了一個textarea來或得iframe里的html值,實際情況,可以將textarea的display設(shè)置成false,然后就可以將iframe的內(nèi)容提交了. demo代碼如下:
CODE:
<html>
<head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <script language="javascript"> function getIframeData(){ document.form1.test.value=HtmlEdit.document.body.innerHTML; } function sentIframeData(){ HtmlEdit.document.body.innerHTML=document.form1.test.value; } function doB(){ HtmlEdit.focus(); var sel = HtmlEdit.document.selection.createRange(); insertHTML("<b>"+sel.text+"</b>"); } function insertHTML(html) { if (HtmlEdit.document.selection.type.toLowerCase() != "none"){ HtmlEdit.document.selection.clear() ; } HtmlEdit.document.selection.createRange().pasteHTML(html) ; } function document.onreadystatechange() { HtmlEdit.document.designMode="On"; } </script> </head> <body> <form action="test.asp?act=add" method="post" name="form1"> <IFRAME id=HtmlEdit style="WIDTH: 100%; HEIGHT: 296px" marginWidth=0 marginHeight=0> </IFRAME> <textarea name="test" rows="10" id="test" style="width:100%;"></textarea> <br> <input type="submit" name="Submit" value="提交"> <input type="button" value="iframe->textarea" onClick="getIframeData()"> <input type="button" value="textarea->iframe" onClick="sentIframeData()"> <input type="button" value="B" onClick="doB()"> </form> </body> </html> 作者: forest 時間: 2006-12-13 08:41 標題: 在線編輯器實現(xiàn)原理(兼容IE和FireFox)
線編輯器在我們?nèi)粘5捻椖块_發(fā)中非常有用(如新聞系統(tǒng)),它可以方便地實現(xiàn)文章的在線編輯,省掉了FrontPage等工具。那么是怎樣實現(xiàn)瀏覽器在線編輯功能的呢? 首先需要IE的支持,在IE5.5以后就有一個編輯狀態(tài). 就是利用這個編輯狀態(tài),然后用javascript來控制在線編輯的。 首先要有一個編輯框,這個編輯框其實就是一個可編輯狀態(tài)的網(wǎng)頁, 我們用iframe來建立編輯框。 <IFRAME id=“HtmlEdit” style="WIDTH: 100%; HEIGHT: 296px" marginWidth=“0” marginHeight=“0”></IFRAME> 并且在加上javascript代碼來指定HtmlEdit有編輯功能(下面提供完整的原代碼):
CODE:
<script language="javascript">
var editor; editor = document.getElementById("HtmlEdit").contentWindow; //只需鍵入以下設(shè)定,iframe立刻變成編輯器。 editor.document.designMode = ‘On‘; editor.document.contentEditable = true; //但是IE與FireFox有點不同,為了兼容FireFox,所以必須創(chuàng)建一個新的document。 editor.document.open(); editor.document.writeln(‘<html><body></body></html>‘); editor.document.close(); //字體特效 - 加粗方法一 function addBold() { editor.focus(); //所有字體特效只是使用execComman()就能完成。 editor.document.execCommand("Bold", false, null); } //字體特效 - 加粗方法二 function addBold() { editor.focus(); //獲得選取的焦點 var sel = editor.document.selection.createRange(); insertHTML("<b>"+sel.text+"</b>"); } function insertHTML(html) { if (editor.document.selection.type.toLowerCase() != "none") { editor.document.selection.clear() ; } editor.document.selection.createRange().pasteHTML(html) ; } </script> 作者: forest 時間: 2006-12-13 08:42 標題: WEB在線編輯器原理
從eWebEditor到 FCKeditor現(xiàn)在有很多很多的在線編輯器了,功能都很強,很多,但是其基本原理卻都很簡單 我發(fā)現(xiàn)的編輯器主要有3大類,我總結(jié)下,把各自的優(yōu)缺點都寫下 直接用textarea 標簽 優(yōu)點:速度快,提交方便,可以用UBB標簽來彌補不能所見所得 缺點:不直觀,功能非常少 用 DIV或者TABLE的CONTENTEDITABLE 標簽,屬性來讓一個區(qū)域可以編輯 優(yōu)點:可以很直觀,可以做各種效果 缺點:此標簽在mozilla下不可用,只適合IE瀏覽器,且對js要求高 用iframe或者frame的中的document的document.designMode ="On" 來實現(xiàn)可編輯 優(yōu)點:具有上面第二條的全部優(yōu)點,并且還多瀏覽器比如ff等支持 缺點:對js要求高 下面是第三點的一個簡單例子代碼
CODE:
<iframe MARGINHEIGHT="1" MARGINWIDTH="1" width="400" height="100"></iframe>
<script language="JavaScript"> <!-- //get frame object frameobj=frames[0]; bodyHtml="<head>\n<style type=\"text/css\">body {font: 10pt verdana;}</style>\n</head>\n<BODY bgcolor=\"#FFFFFF\" MONOSPACE>" bodyHtml += "<style>\np{margin:0px;padding:0px;}\n</style>\n</body>"; frameobj.document.open(); frameobj.document.write(bodyHtml); frameobj.document.close(); frameobj.document.designMode="On"; //--> </script> |
|