http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 8520|回复: 1

[功能帮助类] [C#]如何让webbrowser控件支持Html5

[复制链接]
发表于 2016-2-24 15:30:23 | 显示全部楼层 |阅读模式
最近因为项目的需要,需要研究在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在群里能下载,这里绵阳网站建设就不在累述。好了,文章写到这里就基本上结束了,谢谢你的阅读
http://www.myk3.com/arc-180.html



1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2016-2-24 22:18:00 | 显示全部楼层
这个好啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-5-2 15:43

© 2014-2021

快速回复 返回顶部 返回列表