赞
踩
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>
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。