CefSharp 67 的环境安装
vs 2015
.Net Framework 4.5.2
项目目标框架选择4.5.2
Microsoft Visual C++ 2015 Redistributable 下载地址
系统需要安装C++运行库
1.新建项目
2.新建编译设定
2.使用cefsharp
using System;
using System.Collections.Generic;
using System.Windows;
using Newtonsoft.Json;
using CefSharp;
using System.Linq;
namespace WpfApplication1
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
initial();
}
private void initial()
{
mychrome.DownloadHandler = new MyDownLoadFile();//处理下载
mychrome.MenuHandler = new MenuHandler();//禁用鼠标右键
mychrome.Address = AppDomain.CurrentDomain.BaseDirectory + @"Chart/Chart.html";//页面路径
CefSharpSettings.LegacyJavascriptBindingEnabled = true;//必须配置
//"wpfObj" 在js里的 wpf对象名,可通过此对象访问c#方法
//CallbackObjectForJs js可访问的对象
//CamelCaseJavascriptNames = false 关闭只c#只能调用驼峰式命名的js方法 的设定
mychrome.RegisterAsyncJsObject("wpfObj", new CallbackObjectForJs(), new CefSharp.BindingOptions { CamelCaseJavascriptNames = false });
}
//wpf按钮事件
public void btnClick(object sender, RoutedEventArgs e)
{
//OpenChart js里的一个方法名
//new object[] { 1 } 参数列表
//ExecuteScriptAsync c# 调用js
mychrome.ExecuteScriptAsync("OpenChart", new object[] { 1 });
}
}
//在js里可以访问到的类
public class CallbackObjectForJs
{
public string name = "";
//方法可有返回值
public object getChartData(string table)
{
return new List<string>{"a","b","c"};
}
//方法可没返回值
public void sayChart(string str)
{
MessageBox.Show(str);
}
}
//禁用鼠标右键
public class MenuHandler : CefSharp.IContextMenuHandler
{
public void OnBeforeContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model)
{
model.Clear();
}
public bool OnContextMenuCommand(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, CefMenuCommand commandId, CefEventFlags eventFlags)
{
return false;
}
public void OnContextMenuDismissed(IWebBrowser browserControl, IBrowser browser, IFrame frame)
{
}
public bool RunContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model, IRunContextMenuCallback callback)
{
return false;
}
}
//处理下载
public class MyDownLoadFile : IDownloadHandler
{
public void OnBeforeDownload(IWebBrowser chromiumWebBrowser, IBrowser browser, DownloadItem downloadItem, IBeforeDownloadCallback callback)
{
if (!callback.IsDisposed)
{
using (callback)
{
callback.Continue("", true);
}
}
}
public void OnDownloadUpdated(IWebBrowser chromiumWebBrowser, IBrowser browser, DownloadItem downloadItem, IDownloadItemCallback callback)
{
if (downloadItem.IsComplete)
{
//browser.MainFrame.ExecuteJavaScriptAsync($"document.writeln(' 下载完成,窗口即将关闭')");
//Task.Factory.StartNew(() => {
// Thread.Sleep(2000);
browser.CloseBrowser(true);
//});
}
else if (downloadItem.IsCancelled)
{
browser.CloseBrowser(true);
}
else
{
browser.MainFrame.ExecuteJavaScriptAsync($"var sp=document.getElementsByTagName('span')[0];if(sp === undefined) {{document.write('<span></span>');}}sp.innerText='{downloadItem.FullPath.Split('\\').LastOrDefault()} {downloadItem.PercentComplete}%'");
}
}
}
}
//xmlns:cefSharp="clr-namespace:CefSharp.Wpf;assembly=CefSharp.Wpf" 引入命名空间
//<Button Click="btnClick" Height="50">llgusd</Button> 按钮调用js方法
//<cefSharp:ChromiumWebBrowser x:Name="mychrome" Height="813" Width="auto"/> 创建浏览器
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApplication1"
xmlns:cefSharp="clr-namespace:CefSharp.Wpf;assembly=CefSharp.Wpf"
mc:Ignorable="d"
Title="MainWindow" Height="897.786" Width="905.99" >
<StackPanel x:Name="myst">
<Button Click="btnClick" Height="50">llgusd</Button>
<cefSharp:ChromiumWebBrowser x:Name="mychrome" Height="813" Width="auto"/>
</StackPanel>
</Window>
<script>
//c#按钮调用该js方法OpenChart
function OpenChart(id) {
alert(id);
getData();
sayChart();
}
function getData(){
//js 通过c#注册对象调用c#方法getChartData 有返回值
wpfObj.getChartData('temp').then(data=> {
alert(data[0]);
});
}
function sayChart(){
wpfObj.sayChart('chart');
}
</script>