最近有一个项目,需要在winform中嵌套web网站,从网上了解到几个相关的组件有winform自带的IE内核的WebBrowser,有第三方组件谷歌内核的webkit、cefsharp、chromiumfx等。

  开始为了方便使用WebBrowser,发现有些css样式和js无效(毕竟是ie内核,可以理解),接着用webkit发现有些css和js同样是无效,后来在网上搜索一番,发现cefsharp口碑相对不错,那么就用它了。

  其中在使用过程中也是遇到了不少坑,最为典型的就是加载网页特别慢,不过后来也得到了解决办法,本文中会有提到。

一、首先创建个winform程序。

二、使用NuGet包导入CefSharp.WinForms

三、在前台拖动一个Panel容器,用于显示网站。

四、开始编写后台代码,需要添加

using CefSharp;
using CefSharp.WinForms;
using System;
using System.Windows.Forms; namespace CefSharpDemo
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
InitBrowser();
} public ChromiumWebBrowser browser;
public void InitBrowser()
{
try
{
Cef.Initialize(new CefSettings()); browser = new ChromiumWebBrowser("http://www.baidu.com");
browser.Parent = panel1;
browser.Dock = DockStyle.Fill;
browser.FrameLoadEnd += new EventHandler<FrameLoadEndEventArgs>(FrameEndFunc);
}
catch (Exception ex)
{ }
} private void FrameEndFunc(object sender, FrameLoadEndEventArgs e)
{
//下面替换成你要调用html JS 方法的算法过程。 其中EvaluateScriptAsync为调用JS的方法 //string data = "参数";
//string info = "test0624()"; //我的JS 方法是initValue
//this.browser.EvaluateScriptAsync(info);
}
}
}

这时,你生成项目会发现报错。

看到错误日志我们就明白了,需要把生成改为x86或者x64位,这里我改为x86。

再次运行就ok了,但是你还会发现加载网页为什么这么慢呢?

五、解决CefSharp嵌入网站加载过慢的问题。

  定位后发现很多是因为设置系统代理所致,此时可以通过如下启动参数禁止系统代理。

{"proxy-auto-detect", "0"},
{"no-proxy-server", "1"},

  我们把这配置参数加载启动进程Program里,代码如下:

using CefSharp;
using CefSharp.WinForms;
using System;
using System.IO;
using System.Windows.Forms; namespace CefSharpDemo
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
/*配置浏览器属性*/
var settings = new CefSettings()
{
Locale = "zh-CN",
CachePath = Directory.GetCurrentDirectory() + @"\Cache"
}; settings.CefCommandLineArgs.Add("proxy-auto-detect", "");
settings.CefCommandLineArgs.Add("no-proxy-server", "");
/*初始化配置*/
Cef.Initialize(settings); Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}

  运行查看:

  切记:需要注释掉其他 new CefSettings(),否则会报错,无法加载网站(注释掉本案例中Form1中的 "Cef.Initialize(new CefSettings());" ),原因是:每个进程只能初始化一次CEF。这是底层CEF/Chromium框架的一个限制。

  本想着附带源码放在百度云盘上,后来发现目标文件太大了(300+M),代码倒是没几行,主要是CefSharp的组件容量大,如果程序哪里有问题,大家可以留言或者拍砖。

C# 使用CefSharp嵌入网站的更多相关文章

  1. 在WPF中使用CefSharp嵌入浏览器

    日常开发中,我们需要将一些Web页面嵌入到桌面客户端软件中.下面我们使用CefSharp嵌入浏览器来实现. 首先先介绍一下CefSharp嵌入式浏览器,它是基于Google浏览器的一个组件,我们可以在 ...

  2. 在WPF中使用CefSharp嵌入浏览器(转)

    在WPF中使用CefSharp嵌入浏览器   日常开发中,我们需要将一些Web页面嵌入到桌面客户端软件中.下面我们使用CefSharp嵌入浏览器来实现. 首先先介绍一下CefSharp嵌入式浏览器,它 ...

  3. 【WPF】使用CefSharp嵌入HTML网页

    需求:WPF项目中要做用户的商铺主页,由于考虑到每个商家的主页布局各不相同,不能用XAML写死布局.最好的办法是WPF这边XAML写好一个容器,用户使用HTML可视化编辑器(比如这个)来准备好网页,输 ...

  4. WPF使用CefSharp嵌入网页

    1.点击项目应用下的管理NuGet程序包 2.在浏览中输入cefsharp-->查找 CefSharp.Wpf-->点击安装,等待安装完成 3.如果遇到一下问题将解决方案和项目都改成64位 ...

  5. 使用CefSharp在.Net程序中嵌入Chrome浏览器(一)——简介

    有的时候,我们需要在程序中嵌入Web浏览器,其实.Net Framework中本身就提供了WebBrowser控件,本身这个是最简单易用的方案,但不知道是什么原因,这个控件在浏览网页的时候有些莫名的卡 ...

  6. PV与UV你的网站也可以

    个人博客网站分析 阅读前面的文章,有助于理解本文. 1.是时候来一个个人博客网站了 2.什么?你还没有自己的域名? 3.你的个人博客网站该上线了! 为什么需要流量分析? 各位小伙伴,请看下图,你们发现 ...

  7. canvas简介

    一.canvas简介 1.1 什么是canvas?(了解) 是HTML5提供的一种新标签 <canvas></canvas> 英 ['kænvəs] 美 ['kænvəs] 帆 ...

  8. 使用 WPF+ ASP.NET MVC 开发 在线客服系统 (一)

    近段时间利用业余时间开发了一套在线客服系统,期间遇到过大大小小不少问题,好在都一一解决,最终效果也还可以,打算写一个系列的文章把开发过程详细的记录下来. 希望能够和更多的开发人员互相交流学习,也希望有 ...

  9. 超全的web开发工具和资源

    首页 新闻 产品 地图 动态 城市 帮助 论坛 关于 登录 注册 · 不忘初心,继续前进,环境云V2接口正式上线 · 环境云测点地图全新改版 · 祝福各位环境云用户中秋快乐!   平台信息 培训互动 ...

随机推荐

  1. python 进程和线程-线程和线程变量ThreadLocal

    线程 线程是由若干个进程组成的,所以一个进程至少包含一个线程:并且线程是操作系统直接支持的执行单元.多任务可以由多进程完成,也可由一个进程的多个线程来完成 Python的线程是真正的Posix Thr ...

  2. 用QT 还是MFC

    转自:用QT 还是MFC ? ----不要在跟自己无关的事情上浪费时间 - CSDN博客  http://blog.csdn.net/sergery/article/details/8038897 我 ...

  3. 解决Eclipe安装不上android的ADT的办法

    Eclipse,https://dl-ssl.google.com/android/eclipse/安装不上去,ADT在线安装装不了,用离线包又出问题时会不会疯掉. 显然,国内网络和谐掉了google ...

  4. 《linux就该这么学》课堂笔记16 bind域名解析

    1.DNS域名解析服务 DNS(Domain Name System,域名系统)是一项用于管理和解析域名与IP地址对应关系的技术,就是能够接受用户输入的域名或IP地址,然后自动查找与之匹配(或者说具有 ...

  5. node 淘宝镜像

    永久使用 打开终端执行 npm config set registry https://registry.npm.taobao.org 临时使用 npm --registry https://regi ...

  6. xadmin引入django-rest-framework

    一.安装: pip install djangorestframework 安装djangorestframework库 https://github.com/encode/django-rest-f ...

  7. SSH端口转发之本地转发

    一.案例环境: 3台RHEL6.5 64虚拟机(分别为:HostA.HostB.HostC) IP地址: HostA:192.168.100.101 HostB:192.168.100.102 Hos ...

  8. ArcGIS 10 线转点 polyline to points

    核心提示,使用Construct Points工具,在编辑里,选中一条polyline,然后编辑工具栏里的Construct Points.图等有空再补上吧.

  9. css ie bug 双边距

  10. Java反射之Bean修改更新属性值等工具类

    package com.bocean.util; import java.lang.annotation.Annotation; import java.lang.reflect.Field; imp ...