最近因为项目的需要,需要研究在C#winform窗体中加载网页,和弹出提醒,但我们的网站是HTML5的,ie浏览器内核不支持,而且因为根据客户机系统的不一致,加载的ie内核可能是不同,显示的效果也会不一致,在网上查询了大量的资料,途中遇到了很多的问题。

因为ie内核不支持html5,所以说得出的结论是webbrowser不能支持html5,但是我们可以用其他的内核。比如火狐的内核Gecko,或webkit内核,我从csdn上下载了版本为22的geckofx:地址:http://download.csdn.net/detail/w297088867/6361867

里面有demo,经过测试,可以运行html5页面,显示的效果与目前最新版的360差不多。这样就可以支持为网页包一层外衣了,可是在后来的发现,当网页中的附件链接,点击无效,无法弹出下载保存对话框,对于这个问题,网上似乎没有给出答案,再加上没有js和C#通信的方法,火狐的内核就被搁置了。

在这之后,我开始寻找关于webkit内核的相关资料,这时候我发现了一个叫open-webkit-sharp的东东,他对webkit进行了再次封装,功能强大,而且博文中说了js和C#互调的办法,虽然也存在无法下载附件的问题,但我想如果js可以调用C#,那么就简单了,我可以自己写个下载链接的方法来弹保存对话框。在绵阳网站建设在进过了很多尝试,也无法让源码在我的机器上跑起来,万般无奈下放弃。

如果是webbrowser的js和C#互调,很简单,可以看看这篇文章:http://www.myk3.com/arc-170.html

后来在博客园看到了一个叫CefGlue的东东,也是对webkit的封装,但是这里博主对于整个浏览器的开发做了比较深刻的描述,并且解决了下载附件弹出保存的问题,于是我采用了这个内核,看了这几篇文章就能满足C#winform对html5的支持了,需要的朋友可以搜索 ‘ 基于.net开发chrome核心浏览器’,目前有7篇文章,其中第四篇有源码下载,比较完善了,解决了附件下载的问题和右键菜单和C#调用js的方法都有。

到这里应该就完了,不过,我们还忽略了一个问题,是js调用C#的方法,这个方法在博文中没有解决,不过小安查过资料,需要看这几篇文章,这几篇文章中的作者通过注册js和C#的反射实现了js调用C#,需要了解的请搜索标题:‘Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告’.

如果你看了是否无法看懂,是有点难以理解,但是没关系,他们提供了一个群号,我当时加入了进去,在群共享有个deme,演示js和C#互调的方法。不过他们这个demo直言是了js和C#的互调,对于文件下载的链接依然无效,需要修改一下文件,点击打开demo工程文件,我们只用到了CefGlue和CefGlue.WindowsForms。打开CefGlue.WindowsForms,新建一个类,取名:BsLifeSpanHandler.cs

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xilium.CefGlue;
 
 
namespace Xilium.CefGlue.WindowsForms
{
    public class BsLifeSpanHandler : CefLifeSpanHandler
    {
        private CefWebClient bClient;
        public BsLifeSpanHandler(CefWebClient bc)
        {
            bClient = bc;
        }
        protected override void OnAfterCreated(Xilium.CefGlue.CefBrowser browser)
        {
            base.OnAfterCreated(browser);
            bClient.Created(browser);
        }
    }
}

然后打开CefWebClient.cs文件,添加声明

1
private readonly CefDownloadHandler downloadHandler;

在构造函数中加入

1
downloadHandler = new BsDownloadHandler();

然后添加一个方法名在文档末尾

1
2
3
4
 protected override CefDownloadHandler GetDownloadHandler()
        {
            return downloadHandler;
        }

这样就可以实现点击文档或附件自动弹出下载对话框了,同时又支持javascript和C#的调用。也就能支持绝大多数的客户端开发了。

效果图来一发如下:

对了,窗体做了自绘处理,这样风格就差不多了。

总结,支持Html5与WinForm客户端结合开发,这样大大的提升了效率,不用去使用winAPI自绘按钮什么的,用网页前段技术就可以做软件了。

源码包有些大,这里就不上传了,在博客园中的第四篇文章中有比较完整的源码下载,二jsC#互调的demo在群里能下载,这里绵阳网站建设就不在累述。好了,文章写到这里就基本上结束了,谢谢你的阅读。

[C#]如何让webbrowser控件支持Html5的更多相关文章

  1. WebBrowser控件支持WebSocket

    修改html页面,在Header标签中添加如下标签: <meta http-equiv="X-UA-Compatible"content="IE=edge" ...

  2. C# 指定Webbrowser控件所用IE内核版本

    如果电脑上安装了IE8或者之后版本的IE浏览器,Webbrowser控件会使用IE7兼容模式来显示网页内容.解决方法是在注册表中为你的进程指定引用IE的版本号. 比如我的程序叫做a.exe,以64位机 ...

  3. WebBrowser控件打开https站点

    背景: 与上一篇博文一样,此文亦是由于开发DropboxAPI中遇到问题衍生出来的.由于需要重定向https类型网站,但自己的https证书是自签名的,总是提示'网站的安全证书存在问题'. 鉴此,查了 ...

  4. C++(MFC)中WebBrowser去除3D边框的方法(实现IDocHostUIHandler接口)控制 WebBrowser 控件的外观和行为

    在 CSDN 上经常看到以下两个问题:1.在 MFC 应用程序中,如果创建了一个 WebBrowser 控件(包括 CHtmlView 在内),如何可以把该控件的三维边框禁止掉?2.在 MFC 应用程 ...

  5. VC++使用WebBrowser控件,强制给控件指定版本显示网页

    转载:http://www.cnblogs.com/1175429393wljblog/p/5398928.html 最近为了抓取淘宝的成交数据,用C#的WebBrowser控件开发了一个简单的程序. ...

  6. PB打开ole控件IE浏览器版本问题_指定Webbrowser控件所用IE内核版本(转)

    如果电脑上安装了IE8或者之后版本的IE浏览器,Webbrowser控件会使用IE7兼容模式来显示网页内容.解决方法是在注册表中为你的进程指定引用IE的版本号. 比如我的程序叫做a.exe 对于32位 ...

  7. Delphi WebBrowser控件的使用(大全 good)

    Delphi WebBrowser控件的使用 WebBrowser控件属性:1.Application      如果该对象有效,则返回掌管WebBrowser控件的应用程序实现的自动化对象(IDis ...

  8. 强制IE浏览器或WebBrowser控件使用指定版本显示网页

    自从装了IE10之后,就发现好些个网站显示都不是那么的正常,网站上有些功能竟然还会出现一些意想不到的BUG——本来就是针对IE开发的,现在IE下竟然用不起来了,让用户情何以堪?但是就为少量用户使用的系 ...

  9. WPF中不规则窗体与WebBrowser控件的兼容问题解决办法

    原文:WPF中不规则窗体与WebBrowser控件的兼容问题解决办法 引言 这几天受委托开发一个网络电视项目,要求初步先使用内嵌网页形式实现视频播放和选单,以后再考虑将网页中的所有功能整合进桌面程序. ...

随机推荐

  1. RabbitMQ 高可用集群搭建及电商平台使用经验总结

    面向EDA(事件驱动架构)的方式来设计你的消息 AMQP routing key的设计 RabbitMQ cluster搭建 Mirror queue policy设置 两个不错的RabbitMQ p ...

  2. SQL Server数据库性能优化技巧

    查询速度慢的原因很多,常见如下几种: 1.没有索引或者没有用到索引: 2.I/O吞吐量小,形成了瓶颈效应: 3.内存不足: 4.网络速度慢: 5.查询出的数据量过大: 6.锁或者死锁: 7.返回了不必 ...

  3. 烂泥:python2.7和python3.5源码安装

    本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb 前几天在centos6.6安装ansible时,一直提示python版本不对,导致不能安 ...

  4. Windows批处理:自动部署常用软件(静默安装)

    一.简介 最近一直在测试使用域组策略自动部署软件,效果并不理想.首先,主机必须加入域才能让策略生效.其实是Windows Server 2012 R2只支持.msi格式的安装包,所以部署前需将软件重新 ...

  5. python爬虫学习(5) —— 扒一下codeforces题面

    上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...

  6. Linux多线程学习总结

    线程是程序中完成一个独立任务的完整执行序列,即一个可调度的实体:进程相当于运行中程序的一种抽象.根据运行环境的调度者的身份,线程可分为内核线程和用户线程.内核线程,在有的系统上称为LWP(Light ...

  7. 又见SpringMVC

    一.如何让一个普通类成为Controller? 方案一:实现接口Controller解析:handleRequest(request,response) 方案二:继承AbstractControlle ...

  8. 斐波拉契数列(Fibonacci) 的python实现方式

    第一种:利用for循环 利用for循环时,不涉及到函数,但是这种方法对我种小小白来说比较好理解,一涉及到函数就比较抽象了... >>> fibs = [0,1] >>&g ...

  9. [No00009C]Visual Studio在 解决方案资源管理器 里同步定位打开的文件

    标题的意思就是在使用VS的时候,需要我们打开编辑的文件跟解决方案的资源管理器同步显示,这样方便定位到我们在修改哪个文件. 设置如下: 工具——选项——项目和解决方案——在解决方案资源管理器中跟踪活动项 ...

  10. Lite Your Android English

    https://litesuits.com/ 一些话   简约的背后,往往是复杂 还原面向对象应有的体验,让应对繁多业务所增加的,并未增加. 展开设计理念 Lite每个项目仅几十KB,这相当于你项目中 ...