当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > 用Visual C#打造多页面网页浏览器

ASP.NET
ASP.NET开发:简化应用程序的开发支持Web标准
asp.net XMLHttpRequest实现用户注册前的验证
asp.net 页面间传值方法小结
asp.net url重写浅谈
asp.net 验证码生成和刷新及验证
C#精髓 GridView72大绝技 学习gridview的朋友必看
实例说明asp.net中的简单角色权限控制
asp.net网站开发包wq.dll打包下载
js与ASP.NET 中文乱码问题
asp.net checkbox 动态绑定id GridView删除提示
asp.net TextBox回车触发事件 图片在img显示
asp.net 脏字典过滤问题 用正则表达式来过滤脏数据
asp.NET 脏字过滤算法
asp.NET 脏字过滤算法 修改版
asp.net sql 数据库处理函数命令
asp.net Javascript 的几种写法与提示
ASP.NET MVC学习笔记
asp.net 中国身份证号码验证代码 非正则
Asp.net中使用Sqlite数据库的方法
asp.net 中文字符串提交乱码的解决方法

ASP.NET 中的 用Visual C#打造多页面网页浏览器


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 294 ::
收藏到网摘: n/a

  一、简介

   大家都知道,目前比较流行的网络浏览器如Mozilla FireFox以及MyIE2等都具有多页面浏览功能,每打开一个新的页面都自动产生一个新的选项卡页面,页面的关闭也十分简便。这种设计思想使得用户在浏览多个网页时桌面十分简洁,也避免了用户等待单页面显示的苦恼。由于这些浏览器一般都支持操作多种文件格式,所以当浏览本地机器上的多个文件时也极为方便。

   本文使用Visual C#详细介绍如何实现这种多页面浏览功能。同时,还实现了下面附加功能: 打印, 打印预览,页面属性,选项,查找,查看页面源文件等。

  二、关键技术分析

   解决问题的关键在于对浏览器控件WebBrowser的NewWindow2事件的编程。当需要显示某种文件而生成一个新窗口时,NewWindow2 事件即被激活。注意,该事件发生在WebBrowser控件的新窗口产生之前。例如,作为对导航到一个新窗口或者一个脚本控制的window.open方法的响应,即发生该事件。为了声明当一个新窗口被打开时,将使用我们自己的浏览器程序,应该把参数ppDisp置为Application 对象。此时,如果你选择“在新窗口中打开”,则新产生一个窗口来显示Web页面。你也可以把RegisterAsBrowser设置为TRUE,这将导致新生成的WebBrowser控件参与到窗口命名的冲突问题上。例如,如果一个窗口的名字在脚本的另外一处用到,那么该控件被派上用场,而不是再产生一个新的窗口,因为控件在打开一个新的窗口之前先检查一下所有已存在的窗口名称以避免命名冲突。 在本文示例中,作为对该事件的响应,我们动态地创建一个tab页面,并通过调用CreateNewWebBrowser()方法产生一个WebBrowser控件作为其子控件――这里每一个子控件都有一个包含该控件相关信息的tag属性。详见下面的源码:

private void axWebBrowser1_NewWindow2(object sender, AxSHDocVw.DWebBrowserEvents2_NewWindow2Event e)
{
  AxSHDocVw.AxWebBrowser  _axWebBrowser = CreateNewWebBrowser();
  e.ppDisp = _axWebBrowser.Application;
  _axWebBrowser.RegisterAsBrowser = true;
}

private AxSHDocVw.AxWebBrowser CreateNewWebBrowser()
{
  AxSHDocVw.AxWebBrowser _axWebBrowser = new AxSHDocVw.AxWebBrowser();
  _axWebBrowser.Tag = new HE_WebBrowserTag();
  TabPage _TabPage = new TabPage();
  _TabPage.Controls.Add(_axWebBrowser);
  _axWebBrowser.Dock = DockStyle.Fill;
  _axWebBrowser.BeforeNavigate2 += new AxSHDocVw.DWebBrowserEvents2_BeforeNavigate2EventHandler(this.axWebBrowser1_BeforeNavigate2);

  _axWebBrowser.DocumentComplete += new AxSHDocVw.DWebBrowserEvents2_DocumentCompleteEventHandler(this.axWebBrowser1_DocumentComplete);

  _axWebBrowser.NavigateComplete2 += new AxSHDocVw.DWebBrowserEvents2_NavigateComplete2EventHandler(this.axWebBrowser1_NavigateComplete2);

  _axWebBrowser.NavigateError += new AxSHDocVw.DWebBrowserEvents2_NavigateErrorEventHandler(this.axWebBrowser1_NavigateError);

  _axWebBrowser.NewWindow2 += new AxSHDocVw.DWebBrowserEvents2_NewWindow2EventHandler(this.axWebBrowser1_NewWindow2);

  _axWebBrowser.ProgressChange += new AxSHDocVw.DWebBrowserEvents2_ProgressChangeEventHandler(this.axWebBrowser1_ProgressChange);

  _axWebBrowser.StatusTextChange += new AxSHDocVw.DWebBrowserEvents2_StatusTextChangeEventHandler(this.axWebBrowser1_StatusTextChange);

  _axWebBrowser.TitleChange += new AxSHDocVw.DWebBrowserEvents2_TitleChangeEventHandler(this.axWebBrowser1_TitleChange);

  _axWebBrowser.CommandStateChange += new AxSHDocVw.DWebBrowserEvents2_CommandStateChangeEventHandler(this.axWebBrowser1_CommandStateChange);


  tabControl1.TabPages.Add(_TabPage);
  tabControl1.SelectedTab = _TabPage;

  return _axWebBrowser;

}

   注意,每一个WebBrowser控件都有一个tag,我定义成一个简单的class,它用来包含一些该控件相关的独有信息。请看:

public class HE_WebBrowserTag
{
  public int _TabIndex = 0;
  public bool _CanBack = false;
  public bool _CanForward = false;
}


   三、实现“查找”、“查看页面源文件”、“选项”对话框等功能

   注意 本例程中使用了一个未公开的GUID,其在将来的系统中可以发生变更。

   1、定义 IOleCommandTarget 接口

   为定义一个.NET接口以获得关于一个COM接口的参考,请遵从下列步骤:

   1) 赋予.NET接口相应的COM接口的GUID值;

   2) 包含对接口中所有方法的