<?xml version="1.0" encoding="UTF-8"?>
  <feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html"><![CDATA[PaulLeder--程序部落 - DevLan]]></title>
  <subtitle type="html"><![CDATA[Be Your Personal Best]]></subtitle>
  <id>http://bokee.shinylife.net/blog/</id>
  <link rel="alternate" type="text/html" href="http://bokee.shinylife.net/blog/" /> 
  <link rel="self" type="application/atom+xml" href="http://bokee.shinylife.net/blog/atom.asp" /> 
  <generator uri="http://www.pjhome.net/" version="2.8">PJBlog3</generator> 
  <updated>2008-05-09T15:06:15+08:00</updated>

  <entry>
	  <title type="html"><![CDATA[Fckeditor插件开发总结]]></title>
	  <author>
		 <name>PaulLeder</name>
		 <uri>http://bokee.shinylife.net/blog/</uri>
		 <email>paulleder@msn.com</email>
	  </author>
	  <category term="" scheme="http://bokee.shinylife.net/blog/default.asp?cateID=11" label="DevLan" /> 
	  <updated>2008-05-09T15:06:15+08:00</updated>
	  <published>2008-05-09T15:06:15+08:00</published>
		  <summary type="html"><![CDATA[<strong>1、按钮式插件：</strong><br/>&nbsp;&nbsp; 说明：此插件样式如插入一条水平线一样。即不弹窗口式的按钮<br/>&nbsp;&nbsp; 下面以插入分页标签为例子。<br/>&nbsp;&nbsp; 1）、在plugins目录下新建文件夹：contentPagination，并在里面加一张显示在工具条上的图标<br/>&nbsp;&nbsp; 2）、在contentPagination目录下再增加fckplugin.js文件，内容如下：<br/>&nbsp;&nbsp; <div class="UBBPanel quotePanel"><div class="UBBTitle"><img src="http://bokee.shinylife.net/blog/images/quote.gif" style="margin:0px 2px -3px 0px" alt="引用内容"/> 引用内容</div><div class="UBBContent">FCKCommands.RegisterCommand( &#39;contentPagination&#39;, new FCKToolbarButton( &#39;contentPagination&#39;, &#39;插入分页符&#39;, null, FCK_TOOLBARITEM_ONLYICON, true, true, 1 )) ;<br/>var oContentPaginationItem = new FCKToolbarButton( &#39;contentPagination&#39;, &#34;插入分页符&#34;) ; <br/>oContentPaginationItem.IconPath = FCKPlugins.Items[&#39;contentPagination&#39;].Path + &#39;img1.gif&#39; ; <br/>FCKToolbarItems.RegisterItem( &#39;contentPagination&#39;, oContentPaginationItem ) ; <br/>oContentPaginationItem.Click=function(){//这里就是处理单击事件的接口<br/>&#160;&#160;&#160;&#160;FCK.Ins&#101;rtHtml(&#39;[hiweb_break]&#39;) ;//插入分页标签<br/>}<br/>window.onerror=function(){<br/>&#160;&#160;&#160;&#160;window.onerror=null<br/>&#160;&#160;&#160;&#160;return true;<br/>}</div></div><br/><br/>比较郁闷的是一致以来都没有解决提示FCKCommands没有找到GetCommands这个错误，最后只能增加<br/><div class="UBBPanel quotePanel"><div class="UBBTitle"><img src="http://bokee.shinylife.net/blog/images/quote.gif" style="margin:0px 2px -3px 0px" alt="引用内容"/> 引用内容</div><div class="UBBContent">window.onerror=function(){<br/>&#160;&#160;&#160;&#160;window.onerror=null<br/>&#160;&#160;&#160;&#160;return true;<br/>}</div></div>来处理<br/>&nbsp;&nbsp;&nbsp;&nbsp;3）、修改fckconfig.js：<br/>在<br/><div class="UBBPanel quotePanel"><div class="UBBTitle"><img src="http://bokee.shinylife.net/blog/images/quote.gif" style="margin:0px 2px -3px 0px" alt="引用内容"/> 引用内容</div><div class="UBBContent">FCKConfig.PluginsPath = FCKConfig.BasePath + &#39;plugins/&#39; ;</div></div>下面增加<br/><div class="UBBPanel quotePanel"><div class="UBBTitle"><img src="http://bokee.shinylife.net/blog/images/quote.gif" style="margin:0px 2px -3px 0px" alt="引用内容"/> 引用内容</div><div class="UBBContent">FCKConfig.Plugins.Add( &#39;contentPagination&#39;) ;</div></div><br/>然后在FCKConfig.ToolbarSets你需要加入本标签的集合里加入<br/><div class="UBBPanel quotePanel"><div class="UBBTitle"><img src="http://bokee.shinylife.net/blog/images/quote.gif" style="margin:0px 2px -3px 0px" alt="引用内容"/> 引用内容</div><div class="UBBContent">&#34;contentPagination&#34;</div></div>就可以了<br/><br/><strong>2、弹窗口式组件开发</strong><br/>&nbsp;&nbsp;&nbsp;&nbsp; 说明：此类插件点按钮会弹出一窗口，用户可以点确定把结果返回给Fck输入框<br/>&nbsp;&nbsp;&nbsp;&nbsp;以下以插入MediaPalyer为例<br/>&nbsp;&nbsp;&nbsp;&nbsp;1）、在plugins目录下建MediaPlayer文件夹，并文件夹里加上一个显示在工具栏上的图标wmv.gif。<br/>&nbsp;&nbsp;&nbsp;&nbsp;2）、在MediaPlayer文件夹里创建fckplugin.js文件，文件内容如下<br/><div class="UBBPanel quotePanel"><div class="UBBTitle"><img src="http://bokee.shinylife.net/blog/images/quote.gif" style="margin:0px 2px -3px 0px" alt="引用内容"/> 引用内容</div><div class="UBBContent">&nbsp;&nbsp;&nbsp;&nbsp;FCKCommands.RegisterCommand( &#39;MediaPlayer&#39;, new FCKDialogCommand( &#39;MediaPlayer&#39;,&#39;插入视频&#39;, FCKConfig.BasePath+&#34;dialog/fck_MediaPlayer.html&#34;, 450, 400 ) ) ; //FCKLang.uploadDlgTitle,FCKPlugins.Items[&#39;Photos&#39;].Path + &#39;upPhoto.aspx&#39;<br/><br/>var oUploadMediaItem = new FCKToolbarButton( &#39;MediaPlayer&#39;, &#39;插入视频&#39;) ; <br/>oUploadMediaItem.IconPath = FCKPlugins.Items[&#39;MediaPlayer&#39;].Path + &#39;wmv.gif&#39; ; <br/>FCKToolbarItems.RegisterItem( &#39;MediaPlayer&#39;, oUploadMediaItem ) ; <br/> <br/>var FCKMediaFile = new Object() ; </div></div><br/>&nbsp;&nbsp;&nbsp;&nbsp;3）、在edtor目录下的dialog文件夹下创建文件fck_MediaPlayer.html，文件内容如下<br/><div class="UBBPanel quotePanel"><div class="UBBTitle"><img src="http://bokee.shinylife.net/blog/images/quote.gif" style="margin:0px 2px -3px 0px" alt="引用内容"/> 引用内容</div><div class="UBBContent">&lt;!DOCTYPE HTML PUBLIC &#34;-//W3C//DTD HTML 4.0 Transitional//EN&#34;&gt;<br/>&lt;html&gt;<br/>&#160;&#160;&#160;&#160;&lt;head&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;title&gt;MediaPlayer&lt;/title&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;meta http-equiv=&#34;Content-Type&#34; content=&#34;text/html; charset=utf-8&#34;&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;meta content=&#34;noindex, nofollow&#34; name=&#34;robots&#34;&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;script src=&#34;common/fck_dialog_common.js&#34; type=&#34;text/javascript&#34;&gt;&lt;/script&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;link href=&#34;common/fck_dialog_common.css&#34; type=&#34;text/css&#34; rel=&#34;stylesheet&#34;&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;style type=&#34;text/css&#34;&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ul#MediasList{list-style:none;}/*定义上传文件显示列表CSS*/<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ul#MediasList li{margin:0px;padding:5px 10px 5px 5px;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;/style&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;script type=&#34;text/javascript&#34;&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var oEditor&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;= window.parent.InnerDialogLoaded() ;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var FCK&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;= oEditor.FCK;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var FCKLang&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;= oEditor.FCKLang ;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var FCKMediaFile = oEditor.FCKMediaFile ;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;window.parent.AddTab( &#39;Info&#39;, &#34;插入视频&#34;) ;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;window.parent.AddTab(&#39;upLoaded&#39;,&#39;已上传视频&#39;)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;window.parent.AddTab( &#39;Upload&#39;, &#34;上传视频&#34;) ;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;window.onload = function(){ <br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;LoadSel&#101;ction() ;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;window.parent.SetAutoSize( true ) ;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;window.parent.SetOkButton( true ) ; <br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}&nbsp;&nbsp;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;function OnDialogTabChange( tabCode ){<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ShowE(&#39;divInfo&#39;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;, ( tabCode == &#39;Info&#39; ) ) ;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ShowE(&#39;divupLoaded&#39;&#160;&#160;&#160;&#160;, ( tabCode == &#39;upLoaded&#39; ) ) ;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ShowE(&#39;divUpMedia&#39;&nbsp;&nbsp;, ( tabCode == &#39;Upload&#39;))<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(tabCode==&#34;Upload&#34;){<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;toUpMedia();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;window.parent.SetSel&#101;ctedTab(&#34;info&#34;);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;window.parent.SetOkButton( false ); <br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}else if(tabCode==&#39;upLoaded&#39;){<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;window.parent.SetOkButton( false ); <br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;loadMedias();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}else{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;window.parent.SetOkButton( true ) ; <br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var oEmbed = FCK.Sel&#101;ction.GetSel&#101;ctedElement() ;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;function Ok(){ <br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (GetE(&#39;msrc&#39;)&amp;&amp;(GetE(&#39;msrc&#39;).value!=&#34;<a href="http://" target="_blank" rel="external">http://</a>&#34;)){ <br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(!oEmbed){<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;oEmbed= FCK.Cr&#101;ateElement(&#39;EMBED&#39;) ;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}else{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;oEditor.FCKUndo.SaveUndoStep() ;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Up&#100;ateEmbed(oEmbed) ;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return true ;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}else{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;alert(&#34;请输入正确的视频地址&#34;);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;function toUpMedia(){<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var url=&#34;<a href="http://" target="_blank" rel="external">http://</a>www.abaobao.net&#34;;//设置跳转地址<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;FCK.EditorDocument.open(url,&#34;_media&#34;,&#34;&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.parent.Cancel();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;function LoadSel&#101;ction(){<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (!oEmbed){<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return ;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}else{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;GetE(&#39;msrc&#39;).value= GetAttribute( oEmbed, &#39;src&#39;, &#39;&#39; ) ;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;GetE(&#39;mwidth&#39;).value = GetAttribute( oEmbed, &#39;width&#39;, &#39;&#39; ) ;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;GetE(&#39;mheight&#39;).value= GetAttribute( oEmbed, &#39;height&#39;, &#39;&#39; ) ;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;GetE(&#39;mf&#39;).checked= GetAttribute( oEmbed, &#39;height&#39;, &#39;&#39; ) == &#39;420&#39; ;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;GetE(&#39;mauto&#39;).checked= GetAttribute( oEmbed, &#39;autostart&#39;, &#39;&#39; ) == &#39;true&#39; ;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;function Up&#100;ateEmbed( e ){<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;SetAttribute( e, &#34;src&#34;,GetE(&#39;msrc&#39;).value);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;SetAttribute( e, &#34;width&#34; , GetE(&#39;mwidth&#39;).value ) ;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;SetAttribute( e, &#34;height&#34;, GetE(&#39;mheight&#39;).value ) ;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;SetAttribute( e, &#39;autostart&#39;, GetE(&#39;mauto&#39;).checked? &#39;true&#39; : &#39;false&#39;) ;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;function loadMedias(){<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var url=oEditor.FCKConfig.WPURL+&#34;getMedias.aspx?s=&#34;+Math.random();//url需要加随机化，以使其禁止缓存<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var a=new Ajax.sendRequest(url,&#34;&#34;,&#34;GET&#34;,fillMedias,function(){alert(&#34;获取错误&#34;);})<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;a=null<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;function fillMedias(req){<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;GetE(&#39;MediasList&#39;).innerHTML=req.responseText;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;function ins&#101;rtMedia(value){<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;GetE(&#39;msrc&#39;).value=value;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;GetE(&#39;mheight&#39;).value=&#39;420&#39;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Ok();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;window.parent.Cancel();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;////////////////////////////////////////////////////////<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var Try={<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;these: function(){<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;&#160;&#160;&#160;&#160;var returnValue;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;&#160;&#160;&#160;&#160;for (var i = 0; i &lt; arguments.length; i++) {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var lambda = arguments[i];<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;try{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;returnValue = lambda();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;break;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}catch (e){}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;&#160;&#160;&#160;&#160;return returnValue;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;&nbsp;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var Ajax={<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;&nbsp;&#160;&#160;&#160;&#160;getTransport: function(){<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;&#160;&#160;&#160;&#160;return Try.these(<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;function(){return new ActiveXObject(&#39;Msxml2.XMLHTTP&#39;)},<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;function(){return new ActiveXObject(&#39;Microsoft.XMLHTTP&#39;)},<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;function(){return new XMLHttpRequest()}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;&#160;&#160;&#160;&#160;) || false;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;&nbsp;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Ajax.sendRequest=function(){}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Ajax.sendRequest=function(url,postString,method,onload,onerror){<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this.url=url;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this.postString=postString;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this.method=method;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this.onload=onload?onload:this.defaultOnload;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this.onerror=onerror?onerror:this.defaultError;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this.req=null;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this.loadXMLDoc(url);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Ajax.sendRequest.prototype={<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;loadXMLDoc:function(url){<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this.req=new Ajax.getTransport();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(this.req){<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;try{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var loader=this;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this.req.onreadystatechange=function(){<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;loader.onReadyState.call(loader);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(this.method==&#34;POST&#34;){<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this.req.open(&#39;POST&#39;,url,true);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this.req.setRequestHeader(&#39;Content-type&#39;,&#39;application/x-www-form-urlencoded&#39;);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this.req.send(this.postString);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}else{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this.req.open(&#39;GET&#39;,url,true);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this.req.send(null);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}catch(e){<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this.onerror.call(this);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;},<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;onReadyState:function(){<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var req=this.req;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var ready=req.readyState;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(ready==4){<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var httpStatus=req.status;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(httpStatus==200||httpStatus==0){<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this.onload.call(this,req);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}else{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this.onerror.call(this);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;},<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;defaultOnload:function(req){<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;document.write(unescape(req.responseText));<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;},<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;defaultError:function(){<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;alert(&#34;error fetching data!&#34;+&#34;\nreadyState:&#34;+this.req.readyState+&#34;\nstatus:&#34;+this.req.status+&#34;\nheaders:&#34;+this.req.getAllResponseHeaders());<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;/script&gt;<br/>&#160;&#160;&#160;&#160;&lt;/head&gt;<br/>&#160;&#160;&#160;&#160;&lt;body scroll=&#34;no&#34; style=&#34;OVERFLOW: hidden&#34;&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;div id=&#34;divInfo&#34;&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;table cellSpacing=&#34;1&#34; cellPadding=&#34;1&#34; width=&#34;100%&#34; border=&#34;0&#34;&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;tr&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;td&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;table cellSpacing=&#34;0&#34; cellPadding=&#34;0&#34; width=&#34;100%&#34; border=&#34;0&#34;&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;tr&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;td width=&#34;20%&#34;&gt;视频地址:&lt;/td&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;td id=&#34;tdBrowse&#34;&gt;&lt;input name=&#34;msrc&#34; id=&#34;msrc&#34; value=&#34;<a href="http://" target="_blank" rel="external">http://</a>&#34; type=&#34;text&#34; size=&#34;30&#34; onfocus=&#34;this.sel&#101;ct()&#34;/&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;/td&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;/tr&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;tr&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;td width=&#34;20%&#34;&gt;视频宽度:&lt;/td&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;td id=&#34;tdBrowse&#34;&gt;&lt;input name=&#34;mwidth&#34; id=&#34;mwidth&#34; value=&#34;480&#34; type=&#34;text&#34; size=&#34;4&#34;/&gt;px<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;/td&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;/tr&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;tr&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;td width=&#34;20%&#34;&gt;视频高度:&lt;/td&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;td id=&#34;tdBrowse&#34;&gt;&lt;input name=&#34;mheight&#34; id=&#34;mheight&#34; value=&#34;45&#34; type=&#34;text&#34; size=&#34;4&#34;/&gt;px<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;/td&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;/tr&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;tr&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;td width=&#34;20%&#34;&gt;自动播放:&lt;/td&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;td id=&#34;tdBrowse&#34;&gt;&lt;input name=&#34;mauto&#34; id=&#34;mauto&#34; value=&#34;1&#34; type=&#34;checkbox&#34;/&gt;(打开后编辑内容很慢,建议编辑完内容再打开)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;/td&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;/tr&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;tr&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;td width=&#34;20%&#34;&gt;是否影片:&lt;/td&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;td id=&#34;tdBrowse&#34;&gt;&lt;input name=&#34;mf&#34; id=&#34;mf&#34; value=&#34;1&#34; type=&#34;radio&#34; onclick=&#34;GetE(&#39;mheight&#39;).value=&#39;420&#39;;&#34;/&gt;是&amp;nbsp;&amp;nbsp;&lt;input name=&#34;mf&#34; id=&#34;mf&#34; value=&#34;0&#34; type=&#34;radio&#34; checked=&#34;checked&#34; onclick=&#34;GetE(&#39;mheight&#39;).value=&#39;45&#39;;&#34;/&gt;否<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;/td&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;/tr&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;/table&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;/td&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;/tr&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;/table&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;/div&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;div id=&#34;divupLoaded&#34; style=&#34;display:none;overflow:auto;&#34;&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;div id=&#34;showMedias&#34; style=&#34;overflow:auto;height:200px;&#34;&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;ul id=&#34;MediasList&#34;&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;!--<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//返回类型如下，需要包含ul标签<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;li&gt;&lt;img src=&#34;&#34; alt=&#34;&#34; onclick=&#34;return ins&#101;rtMedia(&#39;<a href="http://" target="_blank" rel="external">http://</a>faafds.mp3&#39;);&#34; style=&#34;height:30px;width:30px;&#34;&gt;&lt;/li&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;--&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;/ul&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;/div&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;/div&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;div id=&#34;divUpMedia&#34; style=&#34;display:none;&#34;&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;/div&gt;<br/>&#160;&#160;&#160;&#160;&lt;/body&gt;<br/>&lt;/html&gt;</div></div><br/>4）、在FCKconfig.js文件里<br/><div class="UBBPanel quotePanel"><div class="UBBTitle"><img src="http://bokee.shinylife.net/blog/images/quote.gif" style="margin:0px 2px -3px 0px" alt="引用内容"/> 引用内容</div><div class="UBBContent">FCKConfig.PluginsPath = FCKConfig.BasePath + &#39;plugins/&#39; ;</div></div><br/>的下面加上<br/><div class="UBBPanel quotePanel"><div class="UBBTitle"><img src="http://bokee.shinylife.net/blog/images/quote.gif" style="margin:0px 2px -3px 0px" alt="引用内容"/> 引用内容</div><div class="UBBContent">FCKConfig.Plugins.Add( &#39;MediaPlayer&#39;,&#39;zh-cn&#39;) ;</div></div><br/>5）、在需要加&#39;MediaPlayer&#39;的地方加上&#39;MediaPlayer&#39;即可（当然是对FCKConfig.ToolbarSets来说）<br/><br/>到此应该说已经结束，我还是把未发完整的代码也发上吧<br/>6）、刚才在fck_MediaPlayer.html里面多出来FCKConfig.WPURL是我定义放置插件控制程序的文件地址。比如<br/><div class="UBBPanel quotePanel"><div class="UBBTitle"><img src="http://bokee.shinylife.net/blog/images/quote.gif" style="margin:0px 2px -3px 0px" alt="引用内容"/> 引用内容</div><div class="UBBContent">FCKConfig.WPURL=&#34;/FCKeditor/fckPlugins/&#34;;//存放插件的外部地址,末尾要以&#39;/&#39;结尾</div></div><br/>上面的代码也是放在FCKconfig.js里的。最好放到<br/><div class="UBBPanel quotePanel"><div class="UBBTitle"><img src="http://bokee.shinylife.net/blog/images/quote.gif" style="margin:0px 2px -3px 0px" alt="引用内容"/> 引用内容</div><div class="UBBContent">FCKConfig.AutoGrowMax = 400 ;</div></div><br/>上面<br/>然后我们在fckPlugins目录下增加文件<br/>getMedias.aspx文件内容如下<br/><div class="UBBPanel quotePanel"><div class="UBBTitle"><img src="http://bokee.shinylife.net/blog/images/quote.gif" style="margin:0px 2px -3px 0px" alt="引用内容"/> 引用内容</div><div class="UBBContent">&lt;%@ Page Language=&#34;C#&#34; AutoEventWireup=&#34;true&#34;&nbsp;&nbsp;CodeFile=&#34;getMedias.aspx.cs&#34; Inherits=&#34;_Default&#34; %&gt;</div></div><br/><br/><br/>getMedias.aspx.cs文件内容如下<br/><div class="UBBPanel quotePanel"><div class="UBBTitle"><img src="http://bokee.shinylife.net/blog/images/quote.gif" style="margin:0px 2px -3px 0px" alt="引用内容"/> 引用内容</div><div class="UBBContent">using System;<br/>using System.Data;<br/>using System.Configuration;<br/>using System.Web;<br/>using System.Web.Security;<br/>using System.Web.UI;<br/>using System.Web.UI.WebControls;<br/>using System.Web.UI.WebControls.WebParts;<br/>using System.Web.UI.HtmlControls;<br/><br/>public partial class _Default : System.Web.UI.Page<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;protected void Page_Load(object sender, EventArgs e)<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&lt;summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//返回视频列表，如<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&lt;li&gt;&lt;img src=&#34;&#34; alt=&#34;&#34; onclick=&#34;return ins&#101;rtMedia(&#39;<a href="http://" target="_blank" rel="external">http://</a>faafds.mp3&#39;);&#34; style=&#34;height:30px;width:30px;&#34;&gt;&lt;/li&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&lt;/summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Response.Write(&#34;&lt;li&gt;&lt;img src=\&#34;\&#34; alt=\&#34;\&#34; onclick=\&#34;return ins&#101;rtMedia(&#39;<a href="http://" target="_blank" rel="external">http://</a>faafds.mp3&#39;);\&#34; style=\&#34;height:30px;width:30px;\&#34;&gt;&lt;/li&gt;&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}</div></div><br/><br/>到此全部完成，至于是怎么解释呢。。。。还是得靠大家自己去琢磨了。<br/>可能还有些问题，望指正。<br/><br/>最后面对.NET文件是动态从服务器上获得用户已上传的文件的一种接口方式。于其他的fck插件并没多大联系]]></summary>
	  <link rel="alternate" type="text/html" href="http://bokee.shinylife.net/blog/article.asp?id=759" /> 
	  <id>http://bokee.shinylife.net/blog/default.asp?id=759</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[关于23种设计模式的有趣见解]]></title>
	  <author>
		 <name>PaulLeder</name>
		 <uri>http://bokee.shinylife.net/blog/</uri>
		 <email>paulleder@msn.com</email>
	  </author>
	  <category term="" scheme="http://bokee.shinylife.net/blog/default.asp?cateID=11" label="DevLan" /> 
	  <updated>2007-09-03T12:53:18+08:00</updated>
	  <published>2007-09-03T12:53:18+08:00</published>
		  <summary type="html"><![CDATA[创建型模式 <br/><br/>1、FACTORY-追MM少不了请吃饭了，麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西，虽然口味有所不同，但不管你带MM去麦当劳或肯德基，只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory <br/><br/>工厂模式：客户类和工厂类分开。消费者任何时候需要某种产品，只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时，工厂类也要做相应的修改。如：如何创建及如何向客户端提供。 <br/><br/>2、 BUILDER-MM最爱听的就是“我爱你”这句话了，见到不同地方的MM,要能够用她们的方言跟她说这句话哦，我有一个多种语言翻译机，上面每种语言都 有一个按键，见到MM我只要按对应的键，它就能够用相应的语言说出“我爱你”这句话了，国外的MM也可以轻松搞掂，这就是我的“我爱你”builder。 （这一定比美军在伊拉克用的翻译机好卖） <br/><br/>建造模式：将产品的内部表象和产品的生成过程分割开来，从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立的变化，客户不必知道产品内部组成的细节。建造模式可以强制实行一种分步骤进行的建造过程。 <br/><br/>3、FACTORY METHOD-请MM去麦当劳吃汉堡，不同的MM有不同的口味，要每个都记住是一件烦人的事情，我一般采用Factory Method模式，带着MM到服务员那儿，说“要一个汉堡”，具体要什么样的汉堡呢，让MM直接跟服务员说就行了。 <br/><br/>工厂方法模式：核心工厂类不再负责所有产品的创建，而是将具体创建的工作交给子类去做，成为一个抽象工厂角色，仅负责给出具体工厂类必须实现的接口，而不接触哪一个产品类应当被实例化这种细节。 <br/><br/>4、PROTOTYPE-跟MM用QQ聊天，一定要说些深情的话语了，我搜集了好多肉麻的情话，需要时只要copy出来放到QQ里面就行了，这就是我的情话prototype了。（100块钱一份，你要不要） <br/><br/>原 始模型模式：通过给出一个原型对象来指明所要创建的对象的类型，然后用复制这个原型对象的方法创建出更多同类型的对象。原始模型模式允许动态的增加或减少 产品类，产品类不需要非得有任何事先确定的等级结构，原始模型模式适用于任何的等级结构。缺点是每一个类都必须配备一个克隆方法。 <br/><br/>5、SINGLETON-俺有6个漂亮的老婆，她们的老公都是我，我就是我们家里的老公Sigleton，她们只要说道“老公”，都是指的同一个人，那就是我(刚才做了个梦啦，哪有这么好的事) <br/><br/>单例模式：单例模式确保某一个类只有一个实例，而且自行实例化并向整个系统提供这个实例单例模式。单例模式只应在有真正的“单一实例”的需求时才可使用。 <br/><br/>结构型模式 <br/><br/>6、ADAPTER-在朋友聚会上碰到了一个美女Sarah，从香港来的，可我不会说粤语，她不会说普通话，只好求助于我的朋友kent了，他作为我和Sarah之间的Adapter，让我和Sarah可以相互交谈了(也不知道他会不会耍我) <br/><br/>适配器（变压器）模式：把一个类的接口变换成客户端所期待的另一种接口，从而使原本因接口原因不匹配而无法一起工作的两个类能够一起工作。适配类可以根据参数返还一个合适的实例给客户端。 <br/><br/>7、BRIDGE-早上碰到MM，要说早上好，晚上碰到MM，要说晚上好；碰到MM穿了件新衣服，要说你的衣服好漂亮哦，碰到MM新做的发型，要说你的头发好漂亮哦。不要问我“早上碰到MM新做了个发型怎么说”这种问题，自己用BRIDGE组合一下不就行了 <br/><br/>桥梁模式：将抽象化与实现化脱耦，使得二者可以独立的变化，也就是说将他们之间的强关联变成弱关联，也就是指在一个软件系统的抽象化和实现化之间使用组合/聚合关系而不是继承关系，从而使两者可以独立的变化。 <br/><br/>8、 COMPOSITE-Mary今天过生日。“我过生日，你要送我一件礼物。”“嗯，好吧，去商店，你自己挑。”“这件T恤挺漂亮，买，这条裙子好看，买， 这个包也不错，买。”“喂，买了三件了呀，我只答应送一件礼物的哦。”“什么呀，T恤加裙子加包包，正好配成一套呀，小姐，麻烦你包起来。”“……”， MM都会用Composite模式了，你会了没有？ <br/><br/>合成模式：合成模式将对象组织到树结构中，可以用来描述整体与部分的关系。合成模式就是一个处理对象的树结构的模式。合成模式把部分与整体的关系用树结构表示出来。合成模式使得客户端把一个个单独的成分对象和由他们复合而成的合成对象同等看待。 <br/><br/>9、 DECORATOR-Mary过完轮到Sarly过生日，还是不要叫她自己挑了，不然这个月伙食费肯定玩完，拿出我去年在华山顶上照的照片，在背面写上 “最好的的礼物，就是爱你的Fita”，再到街上礼品店买了个像框（卖礼品的MM也很漂亮哦），再找隔壁搞美术设计的Mike设计了一个漂亮的盒子装起 来……，我们都是Decorator，最终都在修饰我这个人呀，怎么样，看懂了吗？ <br/><br/>装饰模式：装饰模式以对客户端透明的方式扩展对象的功能，是继承关系的一个替代方案，提供比继承更多的灵活性。动态给一个对象增加功能，这些功能可以再动态的撤消。增加由一些基本功能的排列组合而产生的非常大量的功能。 <br/><br/>10、 FACADE-我有一个专业的Nikon相机，我就喜欢自己手动调光圈、快门，这样照出来的照片才专业，但MM可不懂这些，教了半天也不会。幸好相机有 Facade设计模式，把相机调整到自动档，只要对准目标按快门就行了，一切由相机自动调整，这样MM也可以用这个相机给我拍张照片了。 <br/><br/>门面模式：外部与一个子系统的通信必须通过一个统一的门面对象进行。门面模式提供一个高层次的接口，使得子系统更易于使用。每一个子系统只有一个门面类，而且此门面类只有一个实例，也就是说它是一个单例模式。但整个系统可以有多个门面类。 <br/><br/>11、 FLYWEIGHT-每天跟MM发短信，手指都累死了，最近买了个新手机，可以把一些常用的句子存在手机里，要用的时候，直接拿出来，在前面加上MM的名 字就可以发送了，再不用一个字一个字敲了。共享的句子就是Flyweight，MM的名字就是提取出来的外部特征，根据上下文情况使用。 <br/><br/>享 元模式：FLYWEIGHT在拳击比赛中指最轻量级。享元模式以共享的方式高效的支持大量的细粒度对象。享元模式能做到共享的关键是区分内蕴状态和外蕴状 态。内蕴状态存储在享元内部，不会随环境的改变而有所不同。外蕴状态是随环境的改变而改变的。外蕴状态不能影响内蕴状态，它们是相互独立的。将可以共享的 状态和不可以共享的状态从常规类中区分开来，将不可以共享的状态从类里剔除出去。客户端不可以直接创建被共享的对象，而应当使用一个工厂对象负责创建被共 享的对象。享元模式大幅度的降低内存中对象的数量。 <br/><br/>12、PROXY-跟MM在网上聊天，一开头总是“hi,你好”,“你从哪儿来呀？”“你多大了？”“身高多少呀？”这些话，真烦人，写个程序做为我的Proxy吧，凡是接收到这些话都设置好了自动的回答，接收到其他的话时再通知我回答，怎么样，酷吧。 <br/><br/>代 理模式：代理模式给某一个对象提供一个代理对象，并由代理对象控制对源对象的引用。代理就是一个人或一个机构代表另一个人或者一个机构采取行动。某些情况 下，客户不想或者不能够直接引用一个对象，代理对象可以在客户和目标对象直接起到中介的作用。客户端分辨不出代理主题对象与真实主题对象。代理模式可以并 不知道真正的被代理对象，而仅仅持有一个被代理对象的接口，这时候代理对象不能够创建被代理对象，被代理对象必须有系统的其他角色代为创建并传入。 <br/><br/>行为模式 <br/><br/>13、 CHAIN OF RESPONSIBLEITY-晚上去上英语课，为了好开溜坐到了最后一排，哇，前面坐了好几个漂亮的MM哎，找张纸条，写上“Hi,可以做我的女朋友 吗？如果不愿意请向前传”，纸条就一个接一个的传上去了，糟糕，传到第一排的MM把纸条传给老师了，听说是个老处女呀，快跑! <br/><br/>责任链模式：在责任链模式中，很多对象由每一个对象对其下家的引用而接 <br/><br/>起 来形成一条链。请求在这个链上传递，直到链上的某一个对象决定处理此请求。客户并不知道链上的哪一个对象最终处理这个请求，系统可以在不影响客户端的情况 下动态的重新组织链和分配责任。处理者有两个选择：承担责任或者把责任推给下家。一个请求可以最终不被任何接收端对象所接受。 <br/><br/>14、 COMMAND-俺有一个MM家里管得特别严，没法见面，只好借助于她弟弟在我们俩之间传送信息，她对我有什么指示，就写一张纸条让她弟弟带给我。这不， 她弟弟又传送过来一个COMMAND，为了感谢他，我请他吃了碗杂酱面，哪知道他说：“我同时给我姐姐三个男朋友送COMMAND，就数你最小气，才请我 吃面。”，:-( <br/><br/>命令模式：命令模式把一个请求或者操作封装到一个对象中。命令模式把发出命令的责任和执行命令的责任分割开，委派给不 同的对象。命令模式允许请求的一方和发送的一方独立开来，使得请求的一方不必知道接收请求的一方的接口，更不必知道请求是怎么被接收，以及操作是否执行， 何时被执行以及是怎么被执行的。系统支持命令的撤消。 <br/><br/>15、INTERPRETER-俺有一个《泡MM真经》，上面有各种泡MM的攻略，比如说去吃西餐的步骤、去看电影的方法等等，跟MM约会时，只要做一个Interpreter，照着上面的脚本执行就可以了。 <br/><br/>解 释器模式：给定一个语言后，解释器模式可以定义出其文法的一种表示，并同时提供一个解释器。客户端可以使用这个解释器来解释这个语言中的句子。解释器模式 将描述怎样在有了一个简单的文法后，使用模式设计解释这些语句。在解释器模式里面提到的语言是指任何解释器对象能够解释的任何组合。在解释器模式中需要定 义一个代表文法的命令类的等级结构，也就是一系列的组合规则。每一个命令对象都有一个解释方法，代表对命令对象的解释。命令对象的等级结构中的对象的任何 排列组合都是一个语言。 <br/><br/><br/>16、ITERATOR-我爱上了Mary，不顾一切的向她求婚。 <br/><br/>Mary：“想要我跟你结婚，得答应我的条件” <br/><br/>我：“什么条件我都答应，你说吧” <br/><br/>Mary：“我看上了那个一克拉的钻石” <br/><br/>我：“我买，我买，还有吗？” <br/><br/>Mary：“我看上了湖边的那栋别墅” <br/><br/>我：“我买，我买，还有吗？” <br/><br/>Mary：“你的小弟弟必须要有50cm长” <br/><br/>我脑袋嗡的一声，坐在椅子上，一咬牙：“我剪，我剪，还有吗？” <br/><br/>…… <br/><br/>迭 代子模式：迭代子模式可以顺序访问一个聚集中的元素而不必暴露聚集的内部表象。多个对象聚在一起形成的总体称之为聚集，聚集对象是能够包容一组对象的容器 对象。迭代子模式将迭代逻辑封装到一个独立的子对象中，从而与聚集本身隔开。迭代子模式简化了聚集的界面。每一个聚集对象都可以有一个或一个以上的迭代子 对象，每一个迭代子的迭代状态可以是彼此独立的。迭代算法可以独立于聚集角色变化。 <br/><br/>17、MEDIATOR-四个MM打麻将，相互之间谁应该给谁多少钱算不清楚了，幸亏当时我在旁边，按照各自的筹码数算钱，赚了钱的从我这里拿，赔了钱的也付给我，一切就OK啦，俺得到了四个MM的电话。 <br/><br/>调 停者模式：调停者模式包装了一系列对象相互作用的方式，使得这些对象不必相互明显作用。从而使他们可以松散偶合。当某些对象之间的作用发生改变时，不会立 即影响其他的一些对象之间的作用。保证这些作用可以彼此独立的变化。调停者模式将多对多的相互作用转化为一对多的相互作用。调停者模式将对象的行为和协作 抽象化，把对象在小尺度的行为上与其他对象的相互作用分开处理。 <br/><br/>18、MEMENTO-同时跟几个MM聊天时，一定要记清楚刚才跟MM说了些什么话，不然MM发现了会不高兴的哦，幸亏我有个备忘录，刚才与哪个MM说了什么话我都拷贝一份放到备忘录里面保存，这样可以随时察看以前的记录啦。 <br/><br/>备忘录模式：备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。备忘录模式的用意是在不破坏封装的条件下，将一个对象的状态捉住，并外部化，存储起来，从而可以在将来合适的时候把这个对象还原到存储起来的状态。 <br/><br/>19、OBSERVER-想知道咱们公司最新MM情报吗？加入公司的MM情报邮件组就行了，tom负责搜集情报，他发现的新情报不用一个一个通知我们，直接发布给邮件组，我们作为订阅者（观察者）就可以及时收到情报啦 <br/><br/>观察者模式：观察者模式定义了一种一队多的依赖关系，让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时，会通知所有观察者对象，使他们能够自动更新自己。 <br/><br/>20、 STATE-跟MM交往时，一定要注意她的状态哦，在不同的状态时她的行为会有不同，比如你约她今天晚上去看电影，对你没兴趣的MM就会说“有事情啦”， 对你不讨厌但还没喜欢上的MM就会说“好啊，不过可以带上我同事么？”，已经喜欢上你的MM就会说“几点钟？看完电影再去泡吧怎么样？”，当然你看电影过 程中表现良好的话，也可以把MM的状态从不讨厌不喜欢变成喜欢哦。 <br/><br/>状态模式：状态模式允许一个对象在其内部状态改变的时候改变行为。这 个对象看上去象是改变了它的类一样。状态模式把所研究的对象的行为包装在不同的状态对象里，每一个状态对象都属于一个抽象状态类的一个子类。状态模式的意 图是让一个对象在其内部状态改变的时候，其行为也随之改变。状态模式需要对每一个系统可能取得的状态创立一个状态类的子类。当系统的状态变化时，系统便改 变所选的子类。 <br/><br/>21、STRATEGY-跟不同类型的MM约会，要用不同的策略，有的请电影比较好，有的则去吃小吃效果不错，有的去海边浪漫最合适，单目的都是为了得到MM的芳心，我的追MM锦囊中有好多Strategy哦。 <br/><br/>策 略模式：策略模式针对一组算法，将每一个算法封装到具有共同接口的独立的类中，从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下 发生变化。策略模式把行为和环境分开。环境类负责维持和查询行为类，各种算法在具体的策略类中提供。由于算法和环境独立开来，算法的增减，修改都不会影响 到环境和客户端。 <br/><br/>22、TEMPLATE METHOD--看过《如何说服女生上床》这部经典文章吗？女生从认识到上床的不变的步骤分为巧遇、打破僵局、展开追求、接吻、前戏、动手、爱抚、进去八 大步骤(Template method)，但每个步骤针对不同的情况，都有不一样的做法，这就要看你随机应变啦(具体实现)； <br/><br/>模板方 法模式：模板方法模式准备一个抽象类，将部分逻辑以具体方法以及具体构造子的形式实现，然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以 不同的方式实现这些抽象方法，从而对剩余的逻辑有不同的实现。先制定一个顶级逻辑框架，而将逻辑的细节留给具体的子类去实现。 <br/><br/>23、 VISITOR-情人节到了，要给每个MM送一束鲜花和一张卡片，可是每个MM送的花都要针对她个人的特点，每张卡片也要根据个人的特点来挑，我一个人哪 搞得清楚，还是找花店老板和礼品店老板做一下Visitor，让花店老板根据MM的特点选一束花，让礼品店老板也根据每个人特点选一张卡，这样就轻松多 了； <br/><br/>访问者模式：访问者模式的目的是封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改的话，接受这个操作的数据结构可 以保持不变。访问者模式适用于数据结构相对未定的系统，它把数据结构和作用于结构上的操作之间的耦合解脱开，使得操作集合可以相对自由的演化。访问者模式 使得增加新的操作变的很容易，就是增加一个新的访问者类。访问者模式将有关的行为集中到一个访问者对象中，而不是分散到一个个的节点类中。当使用访问者模 式时，要将尽可能多的对象浏览逻辑放在访问者类中，而不是放到它的子类中。访问者模式可以跨过几个类的等级结构访问属于不同的等级结构的成员类。 ]]></summary>
	  <link rel="alternate" type="text/html" href="http://bokee.shinylife.net/blog/article.asp?id=637" /> 
	  <id>http://bokee.shinylife.net/blog/default.asp?id=637</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[使用javascript实现简单日历 ]]></title>
	  <author>
		 <name>PaulLeder</name>
		 <uri>http://bokee.shinylife.net/blog/</uri>
		 <email>paulleder@msn.com</email>
	  </author>
	  <category term="" scheme="http://bokee.shinylife.net/blog/default.asp?cateID=11" label="DevLan" /> 
	  <updated>2007-05-27T21:06:53+08:00</updated>
	  <published>2007-05-27T21:06:53+08:00</published>
		  <summary type="html"><![CDATA[<div class="UBBPanel"><div class="UBBTitle"><img src="http://bokee.shinylife.net/blog/images/html.gif" style="margin:0px 2px -3px 0px"> HTML代码</div><div class="UBBContent"><TEXTAREA rows="8" id="temp66628"><!DOCTYPE HTML PUBLIC &#34;-//W3C//DTD HTML 4.0 Transitional//EN&#34;>
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME=&#34;Generator&#34; CONTENT=&#34;EditPlus&#34;>
<META NAME=&#34;Author&#34; CONTENT=&#34;&#34;>
<META NAME=&#34;Keywords&#34; CONTENT=&#34;&#34;>
<META NAME=&#34;Description&#34; CONTENT=&#34;&#34;>
</HEAD>

<BODY>
<!--author:jjpengasp@163.com-->
<table border=&#34;1&#34; style=&#34;border-collapse:collapse&#34; bordercolor=&#34;red&#34;>
<colgroup>
<col style=&#34;color:#6600FF&#34;/>
<col />
<col />
<col />
<col />
<col />
<col style=&#34;color:#6600FF&#34;/>
</colgroup>
<caption valign=&#34;top&#34; id=&#34;cap&#34; style=&#34;background:#FFFFCC&#34;></caption>
<tr style=&#34;background:pink&#34;>
    <td>日</td>
    <td>一</td>
    <td>二</td>
    <td>三</td>
    <td>四</td>
    <td>五</td>
    <td>六</td>
</tr>
<script language=&#34;javascript&#34;>
var objdate=new Date();
var tempdate=new Date();
tempdate.setDate(1);
var day=tempdate.getDay();
var maxday=new Date(objdate.getYear(), objdate.getMonth()+1, 0).getDate();
cap.innerText=objdate.getYear()+&#34;年&#34;+(objdate.getMonth()+1)+&#34;月&#34;+objdate.getDate()+&#34;日&#34;;
var d=1,dd=1;
for(var i=0;i<6;i++)
{
document.write(&#34;<tr>&#34;)
for(var j=1;j<8;j++)
{
if(d<=day || dd>maxday){document.write(&#34;<td>&amp;nbsp;</td>&#34;)};
else if(dd==Number(objdate.getDate())){document.write(&#34;<td bgcolor='silver'>&#34;+dd+&#34;</td>&#34;);dd++}
else{document.write(&#34;<td>&#34;+dd+&#34;</td>&#34;);dd++}
d++
}
document.write(&#34;</tr>&#34;)
}
</script>
</table> 

</BODY>
</HTML></TEXTAREA><br/><INPUT onclick="runEx('temp66628')"  type="button" class="userbutton" value="运行此代码"/> <INPUT onclick="doCopy('temp66628')"  type="button" class="userbutton" value="复制此代码"/> <INPUT onclick="saveCode('temp66628')" type="button" class="userbutton" value="保存此代码"><br/> [Ctrl+A 全部选择 提示：你可先修改部分代码，再按运行]</div></div>]]></summary>
	  <link rel="alternate" type="text/html" href="http://bokee.shinylife.net/blog/article.asp?id=540" /> 
	  <id>http://bokee.shinylife.net/blog/default.asp?id=540</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[Tools and source code for .NET]]></title>
	  <author>
		 <name>PaulLeder</name>
		 <uri>http://bokee.shinylife.net/blog/</uri>
		 <email>paulleder@msn.com</email>
	  </author>
	  <category term="" scheme="http://bokee.shinylife.net/blog/default.asp?cateID=11" label="DevLan" /> 
	  <updated>2006-12-18T13:32:59+08:00</updated>
	  <published>2006-12-18T13:32:59+08:00</published>
		  <summary type="html"><![CDATA[<a href="http://www.aisto.com/roeder/dotnet/" target="_blank" rel="external">http://www.aisto.com/roeder/dotnet/</a>]]></summary>
	  <link rel="alternate" type="text/html" href="http://bokee.shinylife.net/blog/article.asp?id=473" /> 
	  <id>http://bokee.shinylife.net/blog/default.asp?id=473</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[在String中==和equals的区别]]></title>
	  <author>
		 <name>PaulLeder</name>
		 <uri>http://bokee.shinylife.net/blog/</uri>
		 <email>paulleder@msn.com</email>
	  </author>
	  <category term="" scheme="http://bokee.shinylife.net/blog/default.asp?cateID=11" label="DevLan" /> 
	  <updated>2006-11-25T13:08:31+08:00</updated>
	  <published>2006-11-25T13:08:31+08:00</published>
		  <summary type="html"><![CDATA[下面是源代码（存为Java文件，编译运行，推敲下结果）：<br/><br/><br/>public class DosShell {<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public static void main(String[] args) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 开始测试了。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&#34;Hello world&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//定义两个对象,并初始化。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String c = &#34;Check equal method&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String d =&#34;Check &#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//这样d 和 c是一样的麽？<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d += &#34;equal method&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&#34;c.equals(d)的结果并不表示c和d到底是不是引用的一个对象，因为它被重载了.结果：&#34;+ (c.equals(d)));&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&#34;c==d的结果表示c和d到底是不是引用的一个对象.结果：&#34;+ (c==d));&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//intern方法是干什么的呢？原来是返回 常量池 中的常量的引用（如果没有就创建一个）。那么下面的结果是什么呢？<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&#34;use intern method c==c.intern()--&gt;&#34; + (c==c.intern()));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&#34;use intern method d==c.intern()--&gt;&#34; + (d==c.intern()));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&#34;use intern method c==d.intern()--&gt;&#34; + (c==d.intern()));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&#34;use intern method d==d.intern()--&gt;&#34; + (d==d.intern()));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//原来c直接是引用的常量池中，而d不是。难怪c!=d;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;//下面这个简单<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String s1 = &#34;123&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String s2 = &#34;345&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&#34;String s1 = \&#34;123\&#34;；String s2 = \&#34;345\&#34;&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&#34;s1==s2: &#34; + (s1==s2));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&#34;s1.equals(s2): &#34; + s1.equals(s2));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&#34;s1.hashCode()==s2.hashCode():&#34; + (s1.hashCode()==s2.hashCode()));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//让s2的引用变一下<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s2 = &#34;123&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&#34;s2 = \&#34;123\&#34;;&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&#34;s1==s2: &#34; + (s1==s2));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&#34;s1.equals(s2): &#34; + s1.equals(s2));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&#34;s1.hashCode()==s2.hashCode():&#34; + (s1.hashCode()==s2.hashCode()));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//原来都是true,都是引用的常量池，如果这样呢？<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s2 = new&nbsp;&nbsp;String(&#34;123&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&#34;s2 = new&nbsp;&nbsp;String(\&#34;123\&#34;);&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&#34;s1==s2: &#34; + (s1==s2));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&#34;s1.equals(s2): &#34; + s1.equals(s2));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&#34;s1.hashCode()==s2.hashCode():&#34; + (s1.hashCode()==s2.hashCode()));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//new 方法在堆中创建了一个新的对象，而s2引用了它，不再是原来引用的常量池了。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//看看这个结果&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s2 = new String();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(s2);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//这个语句相当于s2 = new String(&#34;&#34;);和下面的不一样。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String s3 = null;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(s3);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//再来看看intern方法，说明了什么？？<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String s4 = new String();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&#34;use intern method s4==s4.intern()--&gt;&#34; + (s4==s4.intern()));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//new 在堆创建了了个&#34;&#34;对象，当然和常量池的&#34;&#34;不一样了啊。&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}<br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://bokee.shinylife.net/blog/article.asp?id=467" /> 
	  <id>http://bokee.shinylife.net/blog/default.asp?id=467</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[JavaScript：prototype属性使用说明 ]]></title>
	  <author>
		 <name>PaulLeder</name>
		 <uri>http://bokee.shinylife.net/blog/</uri>
		 <email>paulleder@msn.com</email>
	  </author>
	  <category term="" scheme="http://bokee.shinylife.net/blog/default.asp?cateID=11" label="DevLan" /> 
	  <updated>2006-11-12T13:19:49+08:00</updated>
	  <published>2006-11-12T13:19:49+08:00</published>
		  <summary type="html"><![CDATA[prototype 是在 IE 4 及其以后版本引入的一个针对于某一类的对象的方法，而且特殊的地方便在于：它是一个给类的对象添加方法的方法！这一点可能听起来会有点乱，别急，下面我便通过实例对这一特殊的方法作已下讲解：<br/><br/>　　首先，我们要先了解一下类的概念，JavaScript 本身是一种面向对象的语言，它所涉及的元素根据其属性的不同都依附于某一个特定的类。我们所常见的类包括：数组变量(Array)、逻辑变量(Boolean)、日期变量(Date)、结构变量(Function)、数值变量(Number)、对象变量(Object)、字符串变量(String) 等，而相关的类的方法，也是程序员经常用到的（在这里要区分一下类的注意和属性发方法），例如数组的push方法、日期的get系列方法、字符串的split方法等等，<br/><br/>　　但是在实际的编程过程中不知道有没有感觉到现有方法的不足？prototype 方法应运而生！下面，将通过实例由浅入深讲解 prototype 的具体使用方法：<br/><br/><br/>1、最简单的例子，了解 prototype：<br/>(1) Number.add(num)：作用，数字相加<br/>实现方法：Number.prototype.add = function(num){return(this+num);}<br/>试验：alert((3).add(15)) -&gt; 显示 18<br/><br/><br/>(2) Boolean.rev(): 作用，布尔变量取反<br/>实现方法：Boolean.prototype.rev = function(){return(!this);}<br/>试验：alert((true).rev()) -&gt; 显示 false<br/><br/>是不是很简单？这一节仅仅是告诉读者又这么一种方法，这种方法是这样运用的。<br/><br/><br/>2、已有方法的实现和增强，初识 prototype：<br/>(1) Array.push(new_element)<br/>　　作用：在数组末尾加入一个新的元素<br/>　　实现方法：<br/>　　Array.prototype.push = function(new_element){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this[this.length]=new_element;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return this.length;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>　　让我们进一步来增强他，让他可以一次增加多个元素！<br/>　　实现方法：<br/>　　Array.prototype.pushPro = function() {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var currentLength = this.length;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (var i = 0; i &lt; arguments.length; i++) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this[currentLength + i] = arguments[i];<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return this.length;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>　　应该不难看懂吧？以此类推，你可以考虑一下如何通过增强 Array.pop 来实现删除任意位置，任意多个元素（具体代码就不再细说了）<br/><br/>(2) String.length<br/>　　作用：这实际上是 String 类的一个属性，但是由于 JavaScript 将全角、半角均视为是一个字符，在一些实际运用中可能会造成一定的问题，现在我们通过 prototype 来弥补这部不足。<br/>　　实现方法：<br/>　　String.prototype.cnLength = function(){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var arr=this.match(/[^\x00-\xff]/ig);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return this.length+(arr==null?0:arr.length);<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>　　试验：alert(&#34;EaseWe空间Spaces&#34;.cnLength()) -&gt; 显示 16<br/>　　这里用到了一些正则表达式的方法和全角字符的编码原理，由于属于另两个比较大的类别，本文不加说明，请参考相关材料。<br/><br/><br/>3、新功能的实现，深入 prototype：在实际编程中所用到的肯定不只是已有方法的增强，更多的实行的功能的要求，下面我就举两个用 prototype 解决实际问题的例子：<br/>(1) String.left()<br/>　　问题：用过 vb 的应该都知道left函数，从字符串左边取 n 个字符，但是不足是将全角、半角均视为是一个字符，造成在中英文混排的版面中不能截取等长的字符串<br/>　　作用：从字符串左边截取 n 个字符，并支持全角半角字符的区分<br/>　　实现方法：<br/>　　String.prototype.left = function(num,mode){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!/\d+/.test(num))return(this);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var str = this.substr(0,num);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!mode) return str;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var n = str.Tlength() - str.length;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num = num - parseInt(n/2);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return this.substr(0,num);<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>　　试验：<br/>&nbsp;&nbsp;&nbsp;&nbsp; alert(&#34;EaseWe空间Spaces&#34;.left(8)) -&gt; 显示 EaseWe空间<br/>&nbsp;&nbsp;&nbsp;&nbsp; alert(&#34;EaseWe空间Spaces&#34;.left(8,true)) -&gt; 显示 EaseWe空<br/>　　本方法用到了上面所提到的String.Tlength()方法，自定义方法之间也能组合出一些不错的新方法呀！<br/><br/>(2) Date.DayDiff()<br/>　　作用：计算出两个日期型变量的间隔时间（年、月、日、周）<br/>　　实现方法：<br/>　　Date.prototype.DayDiff = function(cDate,mode){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cDate.getYear();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}catch(e){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(0);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var base =60*60*24*1000;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var result = Math.abs(this - cDate);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch(mode){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case &#34;y&#34;:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result/=base*365;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case &#34;m&#34;:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result/=base*365/12;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case &#34;w&#34;:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result/=base*7;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result/=base;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(Math.floor(result));<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>　　试验：alert((new Date()).DayDiff((new Date(2002,0,1)))) -&gt; 显示 329<br/>&nbsp;&nbsp;&nbsp;&nbsp; alert((new Date()).DayDiff((new Date(2002,0,1)),&#34;m&#34;)) -&gt; 显示 10<br/>　　当然，也可以进一步扩充，得出响应的小时、分钟，甚至是秒。<br/><br/>(3) Number.fact()<br/>　　作用：某一数字的阶乘<br/>　　实现方法：<br/>　　Number.prototype.fact=function(){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var num = Math.floor(this);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(num&lt;0)return NaN;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(num==0 || num==1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return (num*(num-1).fact());<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>　　试验：alert((4).fact()) -&gt; 显示 24<br/>　　这个方法主要是说明了递归的方法在 prototype 方法中也是可行的！ <br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://bokee.shinylife.net/blog/article.asp?id=455" /> 
	  <id>http://bokee.shinylife.net/blog/default.asp?id=455</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[ASCII编码表]]></title>
	  <author>
		 <name>PaulLeder</name>
		 <uri>http://bokee.shinylife.net/blog/</uri>
		 <email>paulleder@msn.com</email>
	  </author>
	  <category term="" scheme="http://bokee.shinylife.net/blog/default.asp?cateID=11" label="DevLan" /> 
	  <updated>2006-07-11T12:06:24+08:00</updated>
	  <published>2006-07-11T12:06:24+08:00</published>
		  <summary type="html"><![CDATA[<img src="http://bokee.shinylife.net/blog/attachments/month_0607/q200671112622.gif" border="0" alt=""/><br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://bokee.shinylife.net/blog/article.asp?id=313" /> 
	  <id>http://bokee.shinylife.net/blog/default.asp?id=313</id>
  </entry>	
		
</feed>
