到目前为止,我已经开发了两个HTML编辑器了,一个用在公司的CMS项目,另一个用在这个Blog(TidyEditor,暂时没有单独发布)。下面总结一下开发的难点以及应对方法。
HTML在线编辑器实际上是什么
其实有好几种实现方式,目前用得最多、兼容性最好的还是iframe方式。
<iframe src="" frameborder="0"></iframe>
只有这个空iframe是不行的,还要用Javascript把它设成可编辑:
iframe.contentWindow.document.designMode = "on";
iframe.contentWindow.document.contentEditable = true;
换而言之,HTML在线编辑器就是一个可编辑的iframe。
加粗、斜体、下划线、加链接等功能如何实现
浏览
这两天QQ概念版炒得很火,而今晚腾讯也终于放出下载地址了,马上来试用一下。据说这个概念版只能在Windows 7下运行,而且是基于WPF的,也就是说要开启.Net运行环境(3.0以上才有WPF)才能用。
安装好以后运行,还是出来一个登录框。不过貌似没有代理服务器的设置,要是公司里封了QQ,就用不了了。

接着进入主界面,各种功能切换的时候有3D动画效果。
经过几个星期的改进和测试,TidyBlog 1.0.5版今天正式发布,有兴趣的朋友可以到此处下载。从1.0.2到1.0.5的更新包括:
- 外观更改。
- 用反射精简了大量代码。
- 改良了文章阅读次数的统计方式,现在1小时内只统计一次。
- 把ashx文件的程序部份写到ashx.cs中,使其可以编译。
- 缓存首页文章列表中除统计次数外的数据。
- 改良了文章阅读次数的统计方式,现在1小时内只统计一次。
- 给附件设置了过期时间,使其可以缓存在本地。
- 登录、评论、留言需使用验证码。
- 更新SQLite驱动为1.0.66版。
- 更新了TidyEditor,格式化时会去掉紧跟</p>的<br />。
像Visual Studio、Dreamweaver、EditPlus这些IDE都是有代码库功能的,平时把一些常用的代码片段收藏到库里面,需要用的时候可以一键插入到上下文,无需重新编写。
然而,比较麻烦的是,这些IDE的代码库都是相互独立的,比如在Dreamweaver里面录入的代码片段,就无法直接插入到Visual Studio里面去。那有没有独立的代码库软件,可以跟所有IDE整合呢?很遗憾,我没有找到,如果看到此篇文章的你找到了,请顺便告诉我。
虽然没有专门的代码库软件,可我后来发现了功能类似的工具——输入法里面的自定义短语。当然,只有紫光、搜狗、QQ拼音这些现代化输入法才有这个功能,像Windows自带的那些八、九十年代的输入法是不行的。

在这个界面开启自定义短语,并添加新短语:
Web应用的基本流程就是通过表单提交数据到服务器,服务器端程序以这些数据建立实体对象,经过处理后更新到数据库。而从表单数据创建实体对象的过程通常是很麻烦的,必须考虑到以下几点:
- 创建什么类型的对象?
- 表单的各项数据如何映射到对象的各项属性?
- 提交到服务器的数据都是字符串类型的,要还原成对应属性的数据类型。
之前我就用泛型写了一个Request工具类。不过这个类仅仅是解决了第三个问题而已,而要解决前两个问题就得靠反射了。
要解决第一个问题,还得用泛型,也就是类型作为参数传入,由此得到这个通用函数的原型:
public class ReqHelper
{
public static T GetEntity<T>()
{
以前我们学校的服务器经常中毒,而且基本上是一个网站中毒而牵连到其他的网站。这无非是服务器的权限配置没做好,让黑客们利用一个大权限用户把整台服务器都给黑了。
其实在NTFS格式的分区下,做权限配置非常简单。
- 为每个站点创建一个Windows用户,这个用户仅拥有站点所在目录及其子目录的读写权限。
- 把创建好的用户设为对应站点的匿名访问账户,访客就是以这个用户的身份访问网站的。
在这样的规则下,用户A只能操作站点A,用户B只能操作站点B。即使站点A中毒了,由于用户A没有操作站点B的权限,所以站点B不会受影响。
上个月买了VPS后,我也是用这个方法配置现在这个Blog,结果一运行就出错。错误信息的大概意思是无法读取web.config。我初步推断这是ASP.NET的进程用了另外一个用户读取站点中的文件,但由于没有权限而被拒绝访问了。折腾了一番后,终于搞清楚这跟应用程序池有关系。
应用程序池是将一