23.1 WebBrowser控件

news2025/2/22 18:31:08

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。

WebBrowser控件类似于IE浏览器的文档界面(事实上IE也是使用的这个控件),它提供了显示网页及支持浏览器的其他文档的容器,同时还提供了浏览器相关的属性、方法和事件,通过它可以很方便地制作一个简易的浏览器,访问并显示网页。

WebBrowser常用属性:

  1. AllowNavigation:加载第一个网页后是否还可以导航到其他页。注意:如果设置为False,那么不管是用Url属性还是Navigate方法或者直接点击网页内的链接,都不能使WebBrowser导航到别的页面。
  2. AllowWebBrowserDrop:是否导航到拖放到它上面的文档。
  3. CanGoBack:指示导航历史记录中的上一页是否可用,如果可用,GoBack方法才能成功。
  4. CanGoForward:指示导航历史记录中的下一页是否可用,如果可用,GoForward方法才能成功。
  5. ContextMenuStrip:关联一个快捷菜单,这是一个ContextMenuStrip类型。
  6. IsWebBrowserContextMenuEnabled:是否启用IE快捷菜单。注意:如果设置了ContextMenuStrip对应的快捷菜单,不论IsWebBrowserContextMenuEnabled设置为True还是False,都会显示自定义的快捷菜单。
  7. Document:表示当前网页,这是一个 HtmlDocument类。它。
  8. DocumentStream:包含网页的内容的流。如果当前未加载网页,则为Nothing。
  9. DocumentText:网页的 HTML 内容。如果当前未加载网页,则为空字符串。
  10. DocumentTitle:文档的标题。
  11. DocumentType:文档的 Multipurpose Internet Mail Extensions (MIME) 类型。
  12. ReadyState:当前状态。
  13. ScriptErrorsSuppressed:是否显示脚本错误消息的对话框。设置为True则不显示对话框,否则显示对话框。
  14. Url:当前文档的URL。
  15. WebBrowserShortcutsEnabled:指示是否启用IE上键盘快捷键。设置为True则启用,否则不启用。
  16. StatusText:包括鼠标指针悬停其上时超链接的URL、当前加载的文档的URL等的状态信息。
  17. ObjectForScripting:网页脚本代码可以用来与应用程序进行通信的对象。

WebBrowser常用方法:

  1. Navigate:将指定的统一资源定位器 (URL) 处的文档加载到 WebBrowser 控件中,替换上一个文档。
  2. GoBack:导航到上一页。
  3. GoForward:导航到下一页。
  4. GoHome:导航到当前用户的主页。
  5. GoSearch:导航到当前用户的默认搜索页。
  6. Print:使用当前打印和页面设置打印当前显示的文档。
  7. ShowPageSetupDialog:打开IE浏览器的页面设置对话框。
  8. ShowPrintDialog:打开IE浏览器的“打印”对话框,但不设置页眉或页脚值。
  9. ShowPrintPreviewDialog:打开IE浏览器的“打印预览”对话框。
  10. ShowPropertiesDialog:打开IE浏览器“属性”对话框。
  11. ShowSaveAsDialog:打开IE浏览器的“保存网页”对话框,如果承载的文档不是HTML页,则打开其“保存”对话框。

WebBrowser常用事件:

  1. DocumentCompleted:当网页或文档载入完成时引发此事件,但是需要注意的是,很多网页有多个页面,会引发多次此事件。
  2. EncryptionLevelChanged:导航到或离开使用了加密的网站时发生。
  3. FileDownload:下载文件时发生。
  4. Navigated:导航到新文档并开始加载该文档时发生。
  5. Navigating:导航到新文档之前发生。它的参数e是一个WebBrowserNavigatingEventArgs类,通过设置e.Cancel=True可以取消对网页的访问。
  6. NewWindow:打开新窗口之前发生。
  7. StatusTextChanged:当StatusText属性值更改时发生。

23.1.1 制作一个简易浏览器

WebBrowser控件提供了NavigateGoHome、GoBack、GoForward等方法,通过这些方法,很容易完成一个简易的浏览器。

【例 23.1【项目:code23-001】简易网页浏览器。

        //打开网址

        private void btnNavigate_Click(object sender, EventArgs e)

        {

            WebBrowser1.Navigate(TextBox1.Text);

            //或者:

            //WebBrowser1.Url = New Uri(TextBox1.Text);

        }

        //后退

        private void btnGoBack_Click(object sender, EventArgs e)

        {

            if (WebBrowser1.CanGoBack)

                WebBrowser1.GoBack();

        }

        //前进

        private void btnGoForward_Click(object sender, EventArgs e)

        {

            if (WebBrowser1.CanGoForward)

                WebBrowser1.GoForward();

        }

        //打印预览

        private void btnPrintPreview_Click(object sender, EventArgs e)

        {

            WebBrowser1.ShowPrintPreviewDialog();

        }

        //网页另存为

        private void btnSaveAs_Click(object sender, EventArgs e)

        {

            WebBrowser1.ShowSaveAsDialog();

        }

        //载入网页完毕

        private void WebBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)

        {

            tsslStatus.Text = "载入完毕:" + e.Url.ToString();

        }

        //开始导航

        private void WebBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)

        {

            //阻止访问网址

            if( e.Url.ToString() == "http://www.google.com/" )

            {

                e.Cancel = true;

                tsslStatus.Text = "阻止载入:" + e.Url.ToString();

            }

        }

运行结果如下图所示:

图23-1 使用WebBrowser控件浏览网页

从图23-1可以看出,这个简易浏览器成功地将qq网页打开了。但是,点击页面上的链接,却不能打开相应的网页。造成这个问题的原因是,网页中链接的target属性设置为了_blank,也就是需要在新窗口中打开被链接的页面。

这个问题的解决方法请参看第23.3.3节。

注意:自制浏览器如果不希望使用者调用到类似IE中的右键菜单,应该设置IsWebBrowserContextMenuEnabled属性为false;如果不希望使用IE中的快捷键,应该设置WebBrowserShortcutsEnabled属性为false;如果希望限制用户停留在指定页面,应该设置AllowNavigation属性和AllowWebBrowserDrop属性为false。

23.1.2 获得网页源代码

大多数浏览器都提供了查看网页代码的功能,WebBrowser也提供了DocumentText属性来获得网页代码。

【例 23.2【项目:code23-002】获得网页源代码。

        //显示网页源代码

        private void btnGetSourceCode_Click(object sender, EventArgs e)

        {

            txtSourceCode.Text = WebBrowser1.DocumentText;

        }

运行结果如下图所示:

图23-2 显示网页源代码

一般情况下使用DocumentText即可获得正确结果,但是如果网页的charset设置不是Utf-8的话,获得的代码就会显示为乱码。可见单靠DocumentText是不能正确识别中文网页的。但可以通过DocumentStream属性来获得正确的网页源代码。

修改后的代码如下:

        private void btnGetSourceCode_Click(object sender, EventArgs e)

        {

            MemoryStream ms = new MemoryStream();

            ms = (MemoryStream)WebBrowser1.DocumentStream;

            //注意:使用的编码需要根据网页而定

            StreamReader sr = new StreamReader(ms, System.Text.Encoding.GetEncoding("utf-8"));

            txtSourceCode.Text = sr.ReadToEnd();

            sr.Close();

            ms.Close();

        }

再次运行,显示正确结果:

图23-3 显示网页源代码

学习更多vb.net知识,请参看vb.net 教程 目录

学习更多C#知识,请参看C#教程 目录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2303558.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue 手写分页

【先看效果】 &#xff08;1&#xff09;内容小于2页 不展示页码 &#xff08;2&#xff09;1 < 内容页数< 限定展示页码 展示&#xff1a;页码、上下页&#xff1b;隐藏&#xff1a;首页、末页图标&#xff0c;上、下一区间码。即&#xff1a;&#xff08;页数&#…

位运算,双指针,二分,排序算法

文章目录 位运算二进制中1的个数题解代码我们需要0题解代码 排序模版排序1题解代码模版排序2题解代码模版排序3题解代码 双指针最长连续不重复子序列题解代码 二分查找题解代码 位运算 1. bitset< 16 >将十进制数转为16位的二进制数 int x 25; cout << bitset<…

Typora软件(Markdown编辑器)详细安装教程(附补丁包)2025最详细图文教程安装手册

目录 前言&#xff1a;Typora是干什么的&#xff1f; 一、下载Typora安装包 二、安装Typora 1.运行安装程序 2.启动安装 3.创建桌面图标 4.开始安装 5.安装完成 三、安装补丁 1.解压补丁包 2.在解压后的补丁包目录下找到“winmm.dll” 3.复制“winmm.dll”到Typora安…

图谱洞见:专栏概要与内容目录

文章目录 图谱洞见&#x1f4da; 核心内容模块时空图模型研究综述与模型对比交通流量预测 知识图谱理论研究预训练语言模型与知识图谱知识图谱补全与链接预测知识蒸馏与知识表示关系建模与图卷积上下文感知与参数生成规则学习与推理可解释性研究因果推理 知识图谱实践应用数据库…

【拜读】Tensor Product Attention Is All You Need姚期智团队开源TPA兼容RoPE位置编码

姚期智团队开源新型注意力&#xff1a;张量积注意力&#xff08;Tensor Product Attention&#xff0c;TPA&#xff09;。有点像一种「动态的LoRA」&#xff0c;核心思路在于利用张量分解来压缩注意力机制中的 Q、K、V 表示&#xff0c;同时保留上下文信息&#xff0c;减少内存…

【电机控制器】ESP32-C3语言模型——DeepSeek

【电机控制器】ESP32-C3语言模型——DeepSeek 文章目录 [TOC](文章目录) 前言一、简介二、代码三、实验结果四、参考资料总结 前言 使用工具&#xff1a; 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、简介 二、代码 #include <Arduino.h&g…

Linux修改主机名称

hostnamectl set-hostname 主机名称 exit 退出登录重新进入即可

STM32 看门狗

目录 背景 独立看门狗&#xff08;IWDG&#xff09; 寄存器访问保护 窗口看门狗&#xff08;WWDG&#xff09; 程序 独立看门狗 设置独立看门狗程序 第一步、使能对独立看门狗寄存器的写操作 第二步、设置预分频和重装载值 第三步、喂狗 第四步、使能独立看门狗 喂狗…

一种简单有效的分析qnx+android智能座舱项目中的画面闪烁的方法(8155平台)

在智能座舱项目的开发过程中&#xff0c;画面闪烁问题是一个常见但棘手的挑战。由于这些闪烁现象往往转瞬即逝&#xff0c;传统的分析工具如截图、录屏或dump图层等方法难以捕捉和定位问题根源。针对这一难题&#xff0c;本文介绍了一种较为有效的分析方法&#xff0c;能够帮助…

ESP32 websocket-client

本文简介 ESP-IDF WebSocket-Client 实验平台 ①ESP-IDF 版本&#xff1a;release/v5.3.2 ③硬件平台&#xff1a;esp32-s3 版权声明 ①作者&#xff1a;coLin ②声明&#xff1a;问题总结&#xff0c;有误解&#xff0c;请联系纠正。 正文 1、基于 esp-idf 如何使用 …

MacOS下使用Ollama本地构建DeepSeek并使用本地Dify构建AI应用

目录 1 大白话说一下文章内容2 作者的电脑配置3 DeepSeek的本地部署3.1 Ollamal的下载和安装3.2 选择合适的deepseek模型3.3 安转deepseek 4 DifyDeepSeek构建Al应用4.1 Dify的安装4.1.1 前置条件4.1.2 拉取代码4.1.3 启动Dify 4.2 Dify控制页面4.3 使用Dify实现个“文章标题生…

DeepSeek写俄罗斯方块手机小游戏

DeepSeek写俄罗斯方块手机小游戏 提问 根据提的要求&#xff0c;让DeepSeek整理的需求&#xff0c;进行提问&#xff0c;内容如下&#xff1a; 请生成一个包含以下功能的可运行移动端俄罗斯方块H5文件&#xff1a; 核心功能要求 原生JavaScript实现&#xff0c;适配手机屏幕 …

DeepSeek 冲击(含本地化部署实践)

DeepSeek无疑是春节档最火爆的话题&#xff0c;上线不足一月&#xff0c;其全球累计下载量已达4000万&#xff0c;反超ChatGPT成为全球增长最快的AI应用&#xff0c;并且完全开源。那么究竟DeepSeek有什么魔力&#xff0c;能够让大家趋之若鹜&#xff0c;他又将怎样改变世界AI格…

2025 WE DAY品牌日| 天璇II WE X7 Pro充电桩震撼发布,能效电气开启充电革命

随着新能源产业的迅猛发展,充电桩作为电动汽车能量补给的重要基础设施,正在成为市场关注的焦点。能效电气作为充电桩领域的佼佼者,专注于研发高效、智能的充电解决方案,为电动汽车的普及与可持续发展铺设了坚实的基础。 2025年2月21日,能效电气在深圳盛大举办了以“以创新 引未…

Python(二十二)实现各大跨境船公司物流查询CMA船司物流查询

一、前言 本章主要实现 【之前CMA船司物流信息查询】的遗留问题 解决思路 由于CMA船司查询需要进行[机器人验证] 方法1&#xff1a;直接从前端跳过&#xff0c;用selenium实现前端自动化&#xff0c;查询物流信息 方法2&#xff1a;捕捉到接口search&#xff0c;但需要将返回…

Ollama 安装

Ollama 支持多种操作系统&#xff0c;包括 macOS、Windows、Linux 以及通过 Docker 容器运行。 Ollama 对硬件要求不高&#xff0c;旨在让用户能够轻松地在本地运行、管理和与大型语言模型进行交互。 CPU&#xff1a;多核处理器&#xff08;推荐 4 核或以上&#xff09;。GPU…

复习dddddddd

1. 思路&#xff1a;用队列先进先出的特性 #include <iostream> #include <vector> #include <stack> #include <cstdio> #include <algorithm> #include <cstring> #include <climits> #include <cstdlib> #include <cma…

大数据技术Kafka详解 ⑥ | Kafka大厂面试题

目录 1、为什么要使用kafka? 2、kafka消费过的消息如何再消费? 3、kafka的数据是放在磁盘上还是内存上&#xff0c;为什么速度会快? 4、kafka数据怎么保障不丢失? 4.1、生产者数据的不丢失 4.2、消费者数据的不丢失 4.3、kafka集群中的broker的数据不丢失 5、采集数…

Jupyter里面的manim编程学习

1.Jupyterlab的使用 因为我之前一直都是使用的vscode进行manim编程的&#xff0c;但是今天看的这个教程使用的是Jupyter&#xff0c;我也很是好奇这个manim在Jupyter这样的交互式下面会生成怎么样的效果&#xff0c;所以今天尝试了jupyter&#xff0c;并且对于两个进行比较和说…

hot100_19. 删除链表的倒数第 N 个结点

hot100_19. 删除链表的倒数第 N 个结点 思路 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5] 示例 2&#xff1a; 输入&#xff1a;head […