在线编辑器实现原理(兼容IE和FireFox)

2012年4月2日 发表评论 阅读评论

在线编辑器实现原理(兼容IE和FireFox)

线编辑器在我们日常的项目开发中非常有用(如新闻系统),它可以方便地实现文章的在线编辑,省掉了FrontPage等工具。那么是怎样实现浏览器 在线编辑功能的呢? 首先需要IE的支持,在IE5.5以后就有一个编辑状态. 就是利用这个编辑状态,然后用javascript来控制在线编辑的。
首先要有一个编辑框,这个编辑框其实就是一个可编辑状态的网页, 我们用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;

//只需键入以下设定,iframe立刻变成编辑器。
editor.document.designMode = 'On';
editor.document.contentEditable = true;

//但是IE与FireFox有点不同,为了兼容FireFox,所以必须创建一个新的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>
[/code]
2006-12-13 08:42 forestWEB在线编辑器原理

从eWebEditor到 FCKeditor现在有很多很多的在线编辑器了,功能都很强,很多,但是其基本原理却都很简单

我发现的编辑器主要有3大类,我总结下,把各自的优缺点都写下

直接用textarea 标签
优点:速度快,提交方便,可以用UBB标签来弥补不能所见所得
缺点:不直观,功能非常少

用 DIV或者TABLE的CONTENTEDITABLE 标签,属性来让一个区域可以编辑
优点:可以很直观,可以做各种效果
缺点:此标签在mozilla下不可用,只适合IE浏览器,且对js要求高

用iframe或者frame的中的document的document.designMode ="On" 来实现可编辑
优点:具有上面第二条的全部优点,并且还多浏览器比如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>


转载请注明来自:[MSN Spaces]http://msn.shandian.biz/212.html

  1. 本文目前尚无任何评论.