<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[梦的热土 - 问题日志]]></title>
<link>http://www.mdrt.org.cn/</link>
<description><![CDATA[专注IT技术，因为有梦才会执着，因为有热土梦才会长大]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog3 v2.8]]></copyright>
<webMaster><![CDATA[anyshe@126.com(无名小卒)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>梦的热土</title>
	<url>http://www.mdrt.org.cn/images/logos.gif</url>
	<link>http://www.mdrt.org.cn/</link>
	<description>梦的热土</description>
</image>

			<item>
			<link>http://www.mdrt.org.cn/article/3.htm</link>
			<title><![CDATA[在线编辑器原理]]></title>
			<author>anyshe@126.com(jbkadmin)</author>
			<category><![CDATA[问题日志]]></category>
			<pubDate>Wed,04 Nov 2009 13:08:47 +0800</pubDate>
			<guid>http://www.mdrt.org.cn/default.asp?id=3</guid>
		<description><![CDATA[首先需要ie 的支持,在 ie 5.5以后就有一个编辑状态. 就是利用这个编辑状态,然后用javascript 来控制 在线编辑的. 下面给出一个简短的例子:<br/><br/>首先要有一个编辑框.这个编辑框其实就是一个 可编辑状态的 网页. 我们这里用iframe 来建立编辑框<br/><br/>&lt;IFRAME id=HtmlEdit style=&#34;WIDTH: 100%; HEIGHT: 296px&#34; marginWidth=0 marginHeight=0&gt;<br/>&lt;/IFRAME&gt;<br/><br/>并且在 加上javascript 代码来指定 HtmlEdit 有编辑功能:<br/><br/>function document.onreadystatechange()<br/>{<br/> HtmlEdit.document.designMode=&#34;On&#34;;<br/>}<br/><br/> <br/><br/>HtmlEdit.document.body.innerHTML&nbsp;&nbsp;这句可以获得 HtmEdit 里面的html代码. 一般的我们会用这样的javascript 将 iframe 里的内容传递给一个textarea 然后提交给服务器处理.<br/><br/>function getIframeData(){<br/> document.form1.test.value=HtmlEdit.document.body.innerHTML;<br/>}<br/>function sentIframeData(){<br/> HtmlEdit.document.body.innerHTML=document.form1.test.value;<br/>}<br/><br/>var sel = HtmlEdit.document.sel&#101;ction.cr&#101;ateRange(); 而这一句可以获得选取的焦点:<br/><br/>下面我就演示一个完成的例子. 一个拥有加粗功能的在线编辑器,有兴趣的朋友可以在此基础上完成其他功能!!<br/><br/>&lt;html&gt;<br/>&lt;head&gt;<br/>&lt;meta http-equiv=&#34;Content-Type&#34; content=&#34;text/html; charset=gb2312&#34;&gt;<br/>&lt;script language=&#34;javascript&#34;&gt;<br/>function getIframeData(){<br/> document.form1.test.value=HtmlEdit.document.body.innerHTML;<br/>}<br/>function sentIframeData(){<br/> HtmlEdit.document.body.innerHTML=document.form1.test.value;<br/>}<br/>function doB(){<br/> HtmlEdit.focus();<br/> var sel = HtmlEdit.document.sel&#101;ction.cr&#101;ateRange();<br/> ins&#101;rtHTML(&#34;&lt;b&gt;&#34;+sel.text+&#34;&lt;/b&gt;&#34;);<br/>}<br/>function ins&#101;rtHTML(html) {<br/> if (HtmlEdit.document.sel&#101;ction.type.toLowerCase() != &#34;none&#34;){<br/>&nbsp;&nbsp;HtmlEdit.document.sel&#101;ction.clear() ;<br/> }<br/> HtmlEdit.document.sel&#101;ction.cr&#101;ateRange().pasteHTML(html) ;<br/>}<br/>function document.onreadystatechange()<br/>{<br/> HtmlEdit.document.designMode=&#34;On&#34;;<br/>}<br/>&lt;/script&gt;<br/>&lt;/head&gt;<br/><br/>&lt;body&gt;<br/>&lt;form action=&#34;test.asp?act=add&#34; method=&#34;post&#34; name=&#34;form1&#34;&gt;<br/> <br/>&lt;IFRAME id=HtmlEdit style=&#34;WIDTH: 100%; HEIGHT: 296px&#34; marginWidth=0 marginHeight=0&gt;<br/>&lt;/IFRAME&gt;<br/>&lt;textarea name=&#34;test&#34; rows=&#34;10&#34; id=&#34;test&#34; style=&#34;width:100%;&#34;&gt;&lt;/textarea&gt;<br/>&lt;br&gt;<br/>&lt;input type=&#34;submit&#34; name=&#34;Submit&#34; value=&#34;提交&#34;&gt;<br/>&lt;input type=&#34;button&#34; value=&#34;iframe-&gt;textarea&#34; onClick=&#34;getIframeData()&#34;&gt;<br/>&lt;input type=&#34;button&#34; value=&#34;textarea-&gt;iframe&#34; onClick=&#34;sentIframeData()&#34;&gt;<br/>&lt;input type=&#34;button&#34; value=&#34;B&#34; onClick=&#34;doB()&#34;&gt;<br/>&lt;/form&gt;<br/>&lt;/body&gt;<br/>&lt;/html&gt;<br/><br/>html在线编辑器的调用方法---原理和实例<br/>[ 2005-11-20 01:17:19 | 作者: Lspcieee ]<br/>字体大小: 大 | 中 | 小<br/>来自51js.com<br/>收藏-2004<br/>HTML在线编辑器不需要懂得使用Dreamweaver，会用Word就会使用此编辑器，在文章系统或者是新闻系统需要文字编辑的web程序中非常实用。<br/>但是如何将html编辑器嵌入到web页中和怎么取得里面的数据呢？！<br/>首先我们假定我们所要调用得HTML在线编辑器放在一个单独得页面中，文件名是gledit.htm上传图片的前台页面：<a href="http://www.jfinfo.com/room/admin/img_upload.asp" target="_blank" rel="external">http://www.jfinfo.com/room/admin/img_upload.asp</a>。<br/>HTML在线编辑器有两种基本调用方法<br/>一、使用object调用(<a href="http://www.jfinfo.com/room/admin/editor.asp" target="_blank" rel="external">http://www.jfinfo.com/room/admin/editor.asp</a>):<br/>1、怎么在web页中嵌入html编辑器： 我们在需要嵌入得位置加入以下html代码：&lt;object id=doc_html data=&#34;gledit.htm&#34; width=530 height=320 type=text/x-scriptlet VIEWASTEXT&gt;&lt;/object&gt;<br/>其中object标签里面得data后面接得数据就是我们所要调用得在线编辑器页得路径，id就是我们调用object得id，后面取编辑器中得数据时就要用到这个id。Width和height就是编辑器得高度和宽度了。<br/>2、怎么取得html编辑器中的数据：所有需要提交的内容我们都是放在一个表单里面，同样利用object调用的编辑器也放在这个表单里面，同时我们可以设置一个隐藏的文本区域(&lt;textarea name=d&#34;content&#34; style=&#34;display:none&#34;&gt;&lt;/textarea&gt;或&lt;INPUT TYPE=&#34;hidden&#34; name=&#34;content&#34;&gt;)用以在提交的时候临时保存html在线编辑器的数据，因为在asp或者jsp，php中不能直接获取表单中的 object的内容，所以我们必须借助隐藏文本区域来获取数据。我们在表单提交的同时将object里面的内容复制到隐藏的文本区域中。详细代码如下：<br/>&lt;script language=&#34;java script &#34;&gt;<br/>function CheckForm()<br/>{<br/>document.form1.content.value=document.form1.doc_html.value;<br/>}<br/>&lt;/script&gt;<br/>&lt;form method=&#34;post&#34; action=&#34;add_news_save.asp&#34; onsubmit=&#34;CheckForm()&#34; name=&#34;form1&#34;&gt;<br/>&lt;object id=doc_html name= doc_html style=&#34;LEFT: 0px; TOP: 0px&#34; data=&#34; gledit.htm&#34; width=530 height=320 type=text/x-scriptlet VIEWASTEXT&gt;&lt;/object&gt;<br/>&lt;input type=&#34;hidden&#34; name=&#34;content&#34; &gt;<br/>&lt;/form&gt;<br/>这样在后台处理的页面中我们就可以直接通过取隐藏区域content的数据来获取html在线编辑器的数据。<br/>3、怎么在文本编辑器中加入上传本机图片到html在线编辑器中：首先我们使得在点击插入图片的按钮时弹出一个上传图片的窗口，我们利用自己写的程序来实现上传本机图片到服务器上，然后我们需要记录图片的路径，然后通过html在线编辑器的值中加入显示图片的html标签。详细说明及代码如下：<br/>在编辑器中我们在插入图片的按钮上加入事件 onclick=&#34;window.open(&#39;img_upload.asp&#39;,&#39;img_upload&#39;,&#39;width=481 height=190&#39;)&#34;&gt;在&#39;img_upload.asp&#39;中我们将提交的图片上传到服务器制定目录然后记录图片路径<br/>&lt;script language=java script &gt;<br/>var src=&#39;&lt;%=&#34;upload/&#34;&amp;newname%&gt;&#39;;<br/>opener.form1. doc_html.value +=&#34;&lt;img border=0 src=&#34;+src+&#34;&gt;&#34;;<br/>window.close();<br/>&lt;/script&gt;<br/>这样就实现了简单的将上传的图片插入到编辑器中。<br/>4、怎么在编辑修改文章的时候调用HTML在线编辑器来修改数据：当我们把在添加的时候将HTML在线编辑器来修改数据提交到数据库后我们还需要能将数据库的内容用HTML在线编辑器来修改数据。首先我们在表单中加入一个隐藏区域来放置数据库中的内容，例如&lt;TEXTAREA style=&#34;display:none&#34; NAME=&#34;content&#34; ROWS=&#34;20&#34; COLS=&#34;70&#34;&gt;&lt;%= rs(&#34;Content&#34;)%&gt;&lt;/TEXTAREA&gt;，要注意这里我们用隐藏的textarea而不能用隐藏的input，因为数据里面可能包含了回车换行，所以如果我们使用&lt;INPUT TYPE=&#34;hidden&#34; name=content value=&#34;&lt;%=(rs(&#34;Content&#34;)%&gt;&#34;&gt;很可能因为&lt;%=(rs(&#34;Content&#34;)%&gt;有换行而出现HTML错误（value=后面接的数据必须保证是在一行，否则出错）。然后按照前面介绍的方法使用object调用HTML在线编辑器，方法和代码同上，现在我们要做的其实就是提交时候的逆过程，我们只要将隐藏文本区域的内容复制到HTML在线编辑器就可以了，在这里我们在body里面加上&lt;body onload=&#34;document.form1. doc_html.value=document.form1.content.value&#34;&gt;，这样在页面装载完的时候就可以将数据库中的内容放入HTML在线编辑器中编辑了，提交过程和上面介绍的一样，在此就不赘述了。<br/><br/>二、使用iframe调用（<a href="http://qxd.5599.net/by/source/article/manage/gledit.htm" target="_blank" rel="external">http://qxd.5599.net/by/source/article/manage/gledit.htm</a> ）<br/>1、 怎么在web页中嵌入：我们在需要嵌入得位置加入以下html代码：&lt;IFRAME SRC=&#34;gledit.htm&#34; id=&#39;content_html&#39; style=&#34;LEFT: 0px; POSITION: absolute; TOP: 0px;z-index:0&#34; width=&#34;100%&#34; height=&#34;100%&#34;&gt;&lt;/IFRAME&gt;其中&#34;src=&#34;后面接得数据就是我们所要调用得在线编辑器页得路径，id就是我们调用IFRAME得id，Width和height就是编辑器得高度和宽度了。<br/>2、怎么取得html编辑器中的数据：同样所有需要提交的内容我们都是放在一个表单里面，同时我们可以设置一个隐藏的文本区域(&lt;textarea name=&#34;content&#34; style=&#34;display:none&#34;&gt;&lt;/textarea&gt;或&lt;INPUT TYPE=&#34;hidden&#34; name=&#34;content&#34;&gt;)用以在提交的时候临时保存html在线编辑器的数据，我们借助隐藏文本区域来获取数据。我们在表单提交的同时将 object里面的内容复制到隐藏的文本区域中。详细代码如下：<br/>function subchk(cmd)<br/>{<br/>document.form1.content.value= window.content_html.getHTML();<br/>}<br/>&lt;/SCRIPT&gt;<br/>&lt;FORM METHOD=POST ACTION=&#34;Article_add_save.gl&#34; name=&#34;form1&#34; onsubmit=&#34; subchk()&#34;&gt;<br/>&lt;input type=&#34;hidden&#34; name=&#34;content&#34; &gt;<br/>&lt;IFRAME SRC=&#34;gledit.htm&#34; id=&#39;content_html&#39; style=&#34;LEFT: 0px; POSITION: absolute; TOP: 0px;z-index:0&#34; width=&#34;100%&#34; height=&#34;100%&#34;&gt;&lt;/IFRAME&gt;<br/>&lt;/FORM&gt;<br/>在后台处理的页面中我们就可以直接通过取隐藏区域content的数据来获取html在线编辑器的数据。<br/>2、怎么取得html编辑器中的数据：所有需要提交的内容我们都是放在一个表单里面，同样利用object调用的编辑器也放在这个表单里面，同时我们可以设置一个隐藏的文本区域(&lt;textarea name=&#34;content&#34; style=&#34;display:none&#34;&gt;&lt;/textarea&gt;或&lt;INPUT TYPE=&#34;hidden&#34; name=&#34;content&#34;&gt;)用以在提交的时候临时保存html在线编辑器的数据，因为在asp或者jsp，php中不能直接获取表单中的 object的内容，所以我们必须借助隐藏文本区域来获取数据。我们在表单提交的同时将object里面的内容复制到隐藏的文本区域中。详细代码如下：<br/>&lt;script language=&#34;java script &#34;&gt;<br/>function CheckForm()<br/>{<br/>document.form1.content.value=document.form1.doc_html.value;<br/>}<br/>&lt;/script&gt;<br/>&lt;form method=&#34;post&#34; action=&#34;add_news_save.asp&#34; onsubmit=&#34;CheckForm()&#34; name=&#34;form1&#34;&gt;<br/>&lt;object id=doc_html name= doc_html style=&#34;LEFT: 0px; TOP: 0px&#34; data=&#34; gledit.htm&#34; width=530 height=320 type=text/x-scriptlet VIEWASTEXT&gt;&lt;/object&gt;<br/>&lt;input type=&#34;hidden&#34; name=&#34;content&#34; &gt;<br/>&lt;/form&gt;<br/>这样在后台处理的页面中我们就可以直接通过取隐藏区域content的数据来获取html在线编辑器的数据。<br/>3、怎么在文本编辑器中加入上传本机图片到html在线编辑器中：首先我们使得在点击插入图片的按钮时弹出一个上传图片的窗口，我们利用自己写的程序来实现上传本机图片到服务器上，然后我们需要记录图片的路径，然后通过在调用html在线编辑器的web页中写一个函数在光标的位置插入显示图片的html标签。详细说明及代码如下：<br/>在编辑器中我们在插入图片的按钮上加入事件 onclick=&#34;window.open(&#39;img_upload.asp&#39;,&#39;img_upload&#39;,&#39;width=481 height=190&#39;)&#34;&gt;在调用编辑器的页面中我们定义好插入html代码到编辑器的函数<br/>&lt;script language=java script &gt;<br/>function ins&#101;rtHtml(HtmlCode)<br/>{<br/>var win=window.content_html.idEditbox.document;//其中编辑区域是gledit.htm中的一个iframe，id是idEditbox<br/>window.content_html.idEditbox.focus();//是编辑器获得焦点，防止代码插入在编辑器外地方<br/>win.sel&#101;ction.cr&#101;ateRange().pasteHTML(HtmlCode)//在光标的位置插入html代码<br/>}<br/>&lt;/script&gt;<br/>在处理上传图片的文件中，我们调用父窗口的函数插入html代码<br/>&lt;script language=java script &gt;<br/>var src=&#39;&lt;%=&#34; upload/&#34;&amp;newname%&gt;&#39;;<br/>var htmlcodes;<br/>htmlcodes = &#34;&lt;img src=&#39;&#34;+src+&#34;&#39; alt=&#39;&lt;%=theForm(&#34;alt&#34;)%&gt;&#39; align=&#39;&lt;%=theForm(&#34;align&#34;)%&gt;&#39; border=&#39;&lt;%=theForm(&#34;border&#34;)%&gt;&#39; hspace=&#39;&lt;%=theForm(&#34;hspace&#34;)%&gt;&#39; vspace=&#39;&lt;%=theForm(&#34;vspace&#34;)%&gt;&#39;&gt;&#34;;<br/>opener.ins&#101;rtHtml(htmlcodes)<br/>window.close();<br/>&lt;/script&gt;<br/>这样就实现了简单的将上传的图片插入到编辑器中。<br/>4、怎么在编辑修改文章的时候调用HTML在线编辑器来修改数据：当我们把在添加的时候将HTML在线编辑器来修改数据提交到数据库后我们还需要能将数据库的内容用HTML在线编辑器来修改数据。首先我们在表单中加入一个隐藏区域来放置数据库中的内容，例如&lt;TEXTAREA style=&#34;display:none&#34; NAME=&#34;content&#34; ROWS=&#34;20&#34; COLS=&#34;70&#34;&gt;&lt;%= rs(&#34;Content&#34;)%&gt;&lt;/TEXTAREA&gt;，在这里我们在调用编辑器的页面中的body标签里面加上&lt;BODY onload=&#34;ins&#101;rtHtml(document.form1.content.value)&#34;&gt;其中ins&#101;rthtml()就是我们定义好插入html代码到编辑器的函数（具体参考插入图片的代码）。这样在页面装载完的时候就可以将数据库中的内容放入HTML在线编辑器中编辑了，提交过程和上面介绍的一样，在此就不赘述了。<br/><br/><br/>从eWebEditor到 FCKeditor现在有很多很多的在线编辑器了，功能都很强，很多，但是其基本原理却都很简单<br/><br/>我发现的编辑器主要有3大类，我总结下，把各自的优缺点都写下<br/><br/>直接用textarea 标签<br/>优点：速度快，提交方便，可以用UBB标签来弥补不能所见所得<br/>缺点：不直观，功能非常少<br/><br/>用 DIV或者TABLE的CONTENTEDITABLE 标签，属性来让一个区域可以编辑<br/>优点：可以很直观，可以做各种效果<br/>缺点：此标签在mozilla下不可用，只适合IE浏览器，且对js要求高<br/><br/>用iframe或者frame的中的document的document.designMode =&#34;On&#34; 来实现可编辑<br/>优点：具有上面第二条的全部优点，并且还多浏览器比如FF等支持<br/>缺点：对js要求高<br/><br/>下面是第三点的一个简单例子代码<br/><br/>&lt;!DOCTYPE html PUBLIC &#34;-//W3C//DTD XHTML 1.0 Transitional//EN&#34; &#34;<a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" target="_blank" rel="external">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd</a>&#34;&gt;<br/>&lt;html xmlns=&#34;<a href="http://www.w3.org/1999/xhtml" target="_blank" rel="external">http://www.w3.org/1999/xhtml</a>&#34;&gt;<br/>&lt;head&gt;<br/>&lt;meta http-equiv=&#34;Content-Type&#34; content=&#34;text/html; charset=gb2312&#34; /&gt;<br/>&lt;title&gt;无标题文档&lt;/title&gt;<br/>&lt;/head&gt;<br/><br/>&lt;body&gt;<br/>&lt;iframe MARGINHEIGHT=&#34;1&#34; MARGINWIDTH=&#34;1&#34; width=&#34;400&#34; height=&#34;100&#34;&gt;&lt;/iframe&gt;<br/>&lt;script language=&#34;JavaScript&#34;&gt;<br/>&lt;!-- //get frame<br/>var bodyHtml;<br/>var frameobj=frames[0];<br/>bodyHtml = &#34;&lt;head&gt;\n&lt;style type=\&#34;text/css\&#34;&gt;body {font: 10pt verdana;}&lt;/style&gt;\n&lt;/head&gt;\n&lt;BODY bgcolor=\&#34;#FFFFFF\&#34; MONOSPACE&gt;&#34;;bodyHtml += &#34;&lt;style&gt;\np{margin:0px;padding:0px;}\n&lt;/style&gt;\n&lt;/body&gt;&#34;;<br/>frameobj.document.open();<br/>frameobj.document.write(bodyHtml);<br/>frameobj.document.close();<br/>frameobj.document.designMode=&#34;On&#34;;<br/>//--&gt;<br/>&lt;/script&gt;<br/>&lt;input name=&#34;&#34; type=&#34;button&#34; value=&#34;查看全部内容&#34; onClick=&#34;alert(frameobj.document.documentElement.innerHTML);&#34;&gt;<br/>&lt;/body&gt;<br/>&lt;/html&gt;]]></description>
		</item>
		
			<item>
			<link>http://www.mdrt.org.cn/article/2.htm</link>
			<title><![CDATA[不区分不行的弱类型脚本中的有类型对象]]></title>
			<author>anyshe@126.com(jbkadmin)</author>
			<category><![CDATA[问题日志]]></category>
			<pubDate>Sat,03 Nov 2007 08:45:57 +0800</pubDate>
			<guid>http://www.mdrt.org.cn/default.asp?id=2</guid>
		<description><![CDATA[在平时使用JavaScript脚本语言的时候，可能你不太会在意一个变量的类型。对待变量和其属性/方法，可以简单的认为呼之即来就可以了，而 JavaScript也鼓励无区别类型地使用语言。通过document.getElementById方法访问和document.name方式得到的页面对象，在很多方面都是是没有差别的，例如常用的document.form.xx。但有时，你却不得不去面对弱类型语言对象中，其实存在类型的差异化，所带来的一些异常行为，特别是利用这两种访问方法访问Frame/iFrame等Html页面对象。<br/>&nbsp;&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;对待页面IFrame元素通过document.getElementById方法或document.getElementByName方法得到的页面元素对象，与通过document.nameIFrame访问得到的页面对象是有比较大差别的具体会体现在 document.getElementById访问出来的是我们一般意义上的Html对象，具有常用的一些Html属性，就像 document.name经常返回的一样，但是在此时通过document.nameIFrame返还的是窗口对象，而由此决定了两种访问方法所出来的对象的属性种类、多寡和用途都是不一样的，大家需要小心的。。。。。]]></description>
		</item>
		
</channel>
</rss>
