首先多谢朋友们的捧场; 

今天给大家带来一个操作WebBrowser的一些高级方法,我专门写了一个html编辑器的实现代码,有需要的朋友可以自己扩充; 
功能实现是直接写流到WebBrowser内不通过临时文件,并且支持对WebBrowser的一些高级控制(其实script可以达到的均可达到,想知道怎么搞的可以阅读代码)。 

其中关于IPersistStreamInit接口的声明费了翻工夫,因为以前在 delphi 中没这么麻烦,呵呵。在网络上找了大半天没找到,最后还是祭出Reflector,反编译Windows.Forms,需要的朋友可以不用辛苦的自己搞了! 

我在这个演示里,制作的html编辑环境是比简单的,您可以看看,比较比较 CodeProject 上的代码;我采用的是ie自身提供的编辑方法,只是这样的方式都被运用于web方式的编辑器内,就好比这个freeTextBox 

以下是主要的代码: 
 

1    /**//******************************** 
   2     * 初始化浏览器状态 
   3     * 指向about:blank 
   4     * *****************************/ 
   5    private void Form1_Load(object sender, System.EventArgs e) { 
   6      object obj = null; 
   7      this.Show(); 
   8      this.axWb.Navigate("about:blank",ref obj,ref obj,ref obj,ref obj);       
   9      //等待完成动作 
  10      while(axWb.ReadyState < SHDocVw.tagREADYSTATE.READYSTATE_INTERACTIVE) 
  11        Application.DoEvents(); 
  12 
  13      //初始化html编辑器 
  14      InitHtmlEditor(); 
  15    } 
  16 
  17    /**//******************************* 
  18     * 这里是核心方法 
  19     * 完全调用IE自身的html编辑功能 
  20     * 可以看到,我采用了一种兼容的 
  21     * 方式,用Frame(框架),这样 
  22     * 的话,默认安装的Windows 98都 
  23     * 支持html编辑功能; 
  24     * 关键代码如下: 
  25     * frame.document.designMode = "on"; 
  26     * 表示开启设计模式 
  27     ******************************/ 
  28    private void InitHtmlEditor(){ 
  29      string sw = ""; 
  30      sw += "<html>\r\n"; 
  31      sw += "<script language=javascript>\r\n"; 
  32      sw += " function loadSet(){\r\n"; 
  33      sw += "  var frame=document.getElementById(\"i-frame\").contentWindow;\r\n"; 
  34      sw += "  frame.document.designMode = \"on\";\r\n"; 
  35      sw += "  frame.document.open();\r\n"; 
  36      sw += "  frame.document.write(\"<html><font color=red>hello 大家好啊!<br>我是S.F. <br>"; 
  37      sw += "  <a href=\\\"\\\">欢迎访问我的weblog</a></font></html>