C# 使用CefSharp嵌入网站
最近有一个项目,需要在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嵌入网站的更多相关文章
- 在WPF中使用CefSharp嵌入浏览器
日常开发中,我们需要将一些Web页面嵌入到桌面客户端软件中.下面我们使用CefSharp嵌入浏览器来实现. 首先先介绍一下CefSharp嵌入式浏览器,它是基于Google浏览器的一个组件,我们可以在 ...
- 在WPF中使用CefSharp嵌入浏览器(转)
在WPF中使用CefSharp嵌入浏览器 日常开发中,我们需要将一些Web页面嵌入到桌面客户端软件中.下面我们使用CefSharp嵌入浏览器来实现. 首先先介绍一下CefSharp嵌入式浏览器,它 ...
- 【WPF】使用CefSharp嵌入HTML网页
需求:WPF项目中要做用户的商铺主页,由于考虑到每个商家的主页布局各不相同,不能用XAML写死布局.最好的办法是WPF这边XAML写好一个容器,用户使用HTML可视化编辑器(比如这个)来准备好网页,输 ...
- WPF使用CefSharp嵌入网页
1.点击项目应用下的管理NuGet程序包 2.在浏览中输入cefsharp-->查找 CefSharp.Wpf-->点击安装,等待安装完成 3.如果遇到一下问题将解决方案和项目都改成64位 ...
- 使用CefSharp在.Net程序中嵌入Chrome浏览器(一)——简介
有的时候,我们需要在程序中嵌入Web浏览器,其实.Net Framework中本身就提供了WebBrowser控件,本身这个是最简单易用的方案,但不知道是什么原因,这个控件在浏览网页的时候有些莫名的卡 ...
- PV与UV你的网站也可以
个人博客网站分析 阅读前面的文章,有助于理解本文. 1.是时候来一个个人博客网站了 2.什么?你还没有自己的域名? 3.你的个人博客网站该上线了! 为什么需要流量分析? 各位小伙伴,请看下图,你们发现 ...
- canvas简介
一.canvas简介 1.1 什么是canvas?(了解) 是HTML5提供的一种新标签 <canvas></canvas> 英 ['kænvəs] 美 ['kænvəs] 帆 ...
- 使用 WPF+ ASP.NET MVC 开发 在线客服系统 (一)
近段时间利用业余时间开发了一套在线客服系统,期间遇到过大大小小不少问题,好在都一一解决,最终效果也还可以,打算写一个系列的文章把开发过程详细的记录下来. 希望能够和更多的开发人员互相交流学习,也希望有 ...
- 超全的web开发工具和资源
首页 新闻 产品 地图 动态 城市 帮助 论坛 关于 登录 注册 · 不忘初心,继续前进,环境云V2接口正式上线 · 环境云测点地图全新改版 · 祝福各位环境云用户中秋快乐! 平台信息 培训互动 ...
随机推荐
- python 进程和线程-线程和线程变量ThreadLocal
线程 线程是由若干个进程组成的,所以一个进程至少包含一个线程:并且线程是操作系统直接支持的执行单元.多任务可以由多进程完成,也可由一个进程的多个线程来完成 Python的线程是真正的Posix Thr ...
- 用QT 还是MFC
转自:用QT 还是MFC ? ----不要在跟自己无关的事情上浪费时间 - CSDN博客 http://blog.csdn.net/sergery/article/details/8038897 我 ...
- 解决Eclipe安装不上android的ADT的办法
Eclipse,https://dl-ssl.google.com/android/eclipse/安装不上去,ADT在线安装装不了,用离线包又出问题时会不会疯掉. 显然,国内网络和谐掉了google ...
- 《linux就该这么学》课堂笔记16 bind域名解析
1.DNS域名解析服务 DNS(Domain Name System,域名系统)是一项用于管理和解析域名与IP地址对应关系的技术,就是能够接受用户输入的域名或IP地址,然后自动查找与之匹配(或者说具有 ...
- node 淘宝镜像
永久使用 打开终端执行 npm config set registry https://registry.npm.taobao.org 临时使用 npm --registry https://regi ...
- xadmin引入django-rest-framework
一.安装: pip install djangorestframework 安装djangorestframework库 https://github.com/encode/django-rest-f ...
- SSH端口转发之本地转发
一.案例环境: 3台RHEL6.5 64虚拟机(分别为:HostA.HostB.HostC) IP地址: HostA:192.168.100.101 HostB:192.168.100.102 Hos ...
- ArcGIS 10 线转点 polyline to points
核心提示,使用Construct Points工具,在编辑里,选中一条polyline,然后编辑工具栏里的Construct Points.图等有空再补上吧.
- css ie bug 双边距
- Java反射之Bean修改更新属性值等工具类
package com.bocean.util; import java.lang.annotation.Annotation; import java.lang.reflect.Field; imp ...