前言:

前一个专题介绍了自定义的Web服务器,然而向Web服务器发出请求的正是本专题要介绍的Web浏览器,本专题通过简单自定义一个Web浏览器来简单介绍浏览器的工作原理,以及帮助一些初学者揭开浏览器这层神秘的面纱(以前总感觉这些应用感觉很深奥的,没想到自己也可以自定义一个浏览器出来),下面不啰嗦了,进入正题。

一、Web浏览器的介绍

Web浏览器是指可以显示Web服务器或者本地文件系统中的Html文件内容,并让用户与这些文件交互的一种软件,它是网络服务的客户端浏览程序,可向Web服务器发送请求,并对服务器返回的超文本信息和各种媒体、图片进行解释和显示。

浏览器主要通过Http协议与服务器交互并获得网页,现在主流的浏览器有:IE,Google Chrome(谷歌浏览器)、Mozilla Firefox(火狐)、Opera浏览器、世界之窗、360安全浏览器等。

Web浏览器的组成

一般来说,Web浏览器由控制器和解释器组成,控制器负责解释鼠标点击与键盘输入,并调用其他组件用于执行用户的指定的操作。例如,当用户输入一个URL或单击一个超链接时,控制器接收并分析该命令,调用一个HTML解释器来解释该页面,并将解释后的结果显示在用户的浏览器上。

解释器对于浏览器来说是很重要的, 解释器,也就是解释引擎,负责对网页语法(如HTML、Javascript)的解释并显示网页,解释器决定了浏览器如何显示页面,是浏览器最重要最核心的一个部分,所以一般我们所说的浏览器内核指的就是浏览器的解释器。

不同浏览器产品可能使用同一个内核,浏览器内核常见的有四种:Trident、Gecko、PrestoWebkit, 他们与主流浏览器的对于关系如下表:

内核

浏览器产品

Trident

IE,Maxthon(傲游),世界之窗,腾讯TT,搜狗浏览器,360安全浏览器

Gecko

Mozilla Firefox(火狐)

Presto

Opera浏览器

Webkit

苹果Safari浏览器,Google Chrome(谷歌浏览器)及苹果Iphone手机浏览引擎

二、.NET平台对浏览器开发的支持

浏览器软件一般都不是从头开始开发的,而是基于某种内核之上的扩展。同样,微软.NET平台封装了IE浏览器内核并以COM组件的形式提供用户,这个COM组件就是WebBrowser控件,该控件实现了浏览器中几乎全部的基本功能。

WebBrowser就是一个以IE(Trident)为内核,实现了基本功能的Web浏览器。使用WebBrowser控件可以在Windows窗体应用程序中浏览网页,WebBrowser控件位于工具箱中,使用时只需要将它直接拖拉到程序窗口中。

下面介绍WebBrowser控件的常用的属性和方法

这里我直接摘自MSDN中的一个表来说明的:

名称 说明

Document 属性

获取一个对象,用于提供对当前网页的 HTML 文档对象模型 (DOM) 的托管访问。

DocumentCompleted 事件

网页完成加载时发生。

DocumentText 属性

获取或设置当前网页的 HTML 内容。

DocumentTitle 属性

获取当前网页的标题。

GoBack 方法

定位到历史记录中的上一页。

GoForward 方法

定位到历史记录中的下一页。

Navigate 方法

定位到指定的 URL。

Navigating 事件

导航开始之前发生,使操作可以被取消。

ObjectForScripting 属性

获取或设置网页脚本代码可以用来与应用程序进行通信的对象。

Print 方法

打印当前的网页。

Refresh 方法

重新加载当前的网页。

Stop 方法

暂停当前的导航,停止动态页元素,如声音和动画。

Url 属性

获取或设置当前网页的 URL。设置该属性时,会将该控件定位到新的 URL。

三、在.NET平台下自定义Web浏览器

下面是自定义浏览器的一些效果图:

浏览器的主页面:

点击查看->源文件->UTF-8后就可以查看Html的源码界面:

关于窗口的设计页面:

在搜索栏里面输入下载后利用百度搜索引擎后显示的页面:

四、总结

本专题主要对Web浏览器的介绍,并且自定义了一个简单的Web浏览器,希望通过本专题,大家可以对浏览器的工作原理有所了解。如果大家有什么任何疑问或者我有说的不对的地方还请大家留言来告诉我。讲到这里本专题也算结束,后面将介绍TCP编程和UDP编程,以及介绍完这两个专题后将为大家介绍如何开发一个即时通信聊天的工具(类似QQ的应用程序)。

补充: 鉴于很多朋友推荐使用非IE内核来实现一个浏览器的功能,这里分享下Webkit.net(WebKit .NET 是一个 C# 的组件封装了 WebKit 浏览器引擎,通过它可以在 .NET 应用中简单的使用(Google Chrome的内核)WebKit 浏览器引擎)的源码地址,也给有兴趣的朋友研究,当然我也会研究下,之后会和大家分享下这个工具的使用。同时感谢大家的留言和建议。
Webkit.net源码地址为:http://sourceforge.net/projects/webkitdotnet/

如果觉得有帮助的还请大家推荐下, 源代码链接为:http://files.cnblogs.com/zhili/WebBrowser.zip

转载于:https://www.cnblogs.com/ywsoftware/archive/2013/05/14/3077155.html

[C# 网络编程系列]专题四:自定义Web浏览器相关推荐

  1. [C# 网络编程系列]专题十二:实现一个简单的FTP服务器

    引言: 休息一个国庆节后好久没有更新文章了,主要是刚开始休息完心态还没有调整过来的, 现在差不多进入状态了, 所以继续和大家分享下网络编程的知识,在本专题中将和大家分享如何自己实现一个简单的FTP服务 ...

  2. [C# 网络编程系列]专题十:实现简单的邮件收发器

    引言: 在我们的平常工作中,邮件的发送和接收应该是我们经常要使用到的功能的.因此知道电子邮件的应用程序的原理也是非常有必要的,在这一个专题中将介绍电子邮件应用程序的原理.电子邮件应用程序中涉及的协议和 ...

  3. [C#]网络编程系列专题二:HTTP协议详解

    转自:http://www.cnblogs.com/zhili/archive/2012/08/18/2634475.html 我们在用Asp.net技术开发Web应用程序后,当用户在浏览器输入一个网 ...

  4. [C# 网络编程系列]专题十一:实现一个基于FTP协议的程序——文件上传下载器...

    引言: 在这个专题将为大家揭开下FTP这个协议的面纱,其实学习知识和生活中的例子都是很相通的,就拿这个专题来说,要了解FTP协议然后根据FTP协议实现一个文件下载器,就和和追MM是差不多的过程的,相信 ...

  5. [C# 网络编程系列]专题五:TCP编程

    前言 前面专题的例子都是基于应用层上的HTTP协议的介绍, 现在本专题来介绍下传输层协议--TCP协议,主要介绍下TCP协议的工作过程和基于TCP协议的一个简单的通信程序,下面就开始本专题的正文了. ...

  6. [C# 网络编程系列]专题六:UDP编程

    引言: 前一个专题简单介绍了TCP编程的一些知识,UDP与TCP地位相当的另一个传输层协议,它也是当下流行的很多主流网络应用(例如QQ.MSN和Skype等一些即时通信软件传输层都是应用UDP协议的) ...

  7. [C# 网络编程系列]专题九:实现类似QQ的即时通信程序

    引言: 前面专题中介绍了UDP.TCP和P2P编程,并且通过一些小的示例来让大家更好的理解它们的工作原理以及怎样.Net类库去实现它们的.为了让大家更好的理解我们平常中常见的软件QQ的工作原理,所以在 ...

  8. [C# 网络编程系列]专题七:UDP编程补充——UDP广播程序的实现

    上次因为时间的关系,所以把上一个专题遗留下的一个问题在本专题中和大家分享下,本专题主要介绍下如何实现UDP广播的程序,下面就直接介绍实现过程和代码以及运行的结果. 一.程序实现 UDP广播程序的实现代 ...

  9. Java 网络编程系列之 NIO

    Java 网络编程系列之 NIO 第 1 章Java NIO 概述 1.1 IO 概述 IO 的操作方式 1.2 阻塞 IO (BIO) 1.3 非阻塞 IO(NIO) 1.4 异步非阻塞 IO(AI ...

最新文章

  1. 机器学习101:我们天天都在说的机器学习,究竟该怎么入门?
  2. 【NOI2015】荷马史诗
  3. java如何定义一个字符栈_Java性能优化之字符串优化处理
  4. 排序算法之计数排序、基数排序和桶排序
  5. MySQL-基本的SELECT语句
  6. 天津市电子计算机职业学院,天津市电子计算机职业中等专业学校
  7. 谁在指使这家印度 IT 公司攻击全球政治家、投资者和记者?
  8. 安装python3-dev_linux安装python3
  9. Java完成excel表格导出
  10. 石油化工设备维护检修规程_超级石化好文推荐:提升石化设备管理水平 最新修订版维护检修规程!...
  11. dnf怎么显示连接服务器失败怎么回事,登录DNF显示连接不到服务器怎么办 服务器连接失败解决方法...
  12. 【独立站运营】什么是营销转化率?如何提升转化率?
  13. Google-Hacking 语法笔记
  14. 中科院广州电子CASAIM与东风日产在3D打印生产制造发动机检具及治具应用研究项目顺利落地
  15. 0x80073712_win10系统-更新失败提示“0x80073712”如何解决?
  16. Linux tar/rpm/yum命令软件安装
  17. Will not attempt to authenticate using SASL (unknown error) (org.apache.zookeeper.ClientCnxn)
  18. JAVA练习题17:文字版格斗游戏
  19. 通过微透镜阵列的传播
  20. 关于Python爬虫种类、法律、轮子的一二三

热门文章

  1. Cannot set property 'render' of undefined
  2. 大家好,给大家介绍一下,我们的主题歌 @虾米音乐
  3. 655. Print Binary Tree 解题报告(树)
  4. Linux命令篇之usermod命令和passwd命令
  5. [Asp.net mvc]OutputCacheAttribute
  6. hdu 3449 Consumer 01背包
  7. Django使用已经存有数据的mysql数据库
  8. 在C#中用COM操作CAD
  9. Day3 python基础
  10. 一种混合加密方案在软件授权中的应用