WPF CefSharp v67 vs2015详细安装使用 嵌入本地html c#与js交互

CefSharp 67 的环境安装
vs 2015
.Net Framework 4.5.2
项目目标框架选择4.5.2

Microsoft Visual C++ 2015 Redistributable 下载地址
系统需要安装C++运行库

1.新建项目
WPF CefSharp v67 vs2015详细安装使用 嵌入本地html c#与js交互_第1张图片

2.新建编译设定
WPF CefSharp v67 vs2015详细安装使用 嵌入本地html c#与js交互_第2张图片

WPF CefSharp v67 vs2015详细安装使用 嵌入本地html c#与js交互_第3张图片

WPF CefSharp v67 vs2015详细安装使用 嵌入本地html c#与js交互_第4张图片

WPF CefSharp v67 vs2015详细安装使用 嵌入本地html c#与js交互_第5张图片
WPF CefSharp v67 vs2015详细安装使用 嵌入本地html c#与js交互_第6张图片
WPF CefSharp v67 vs2015详细安装使用 嵌入本地html c#与js交互_第7张图片
这里选86或64随意
WPF CefSharp v67 vs2015详细安装使用 嵌入本地html c#与js交互_第8张图片
WPF CefSharp v67 vs2015详细安装使用 嵌入本地html c#与js交互_第9张图片
WPF CefSharp v67 vs2015详细安装使用 嵌入本地html c#与js交互_第10张图片
WPF CefSharp v67 vs2015详细安装使用 嵌入本地html c#与js交互_第11张图片
WPF CefSharp v67 vs2015详细安装使用 嵌入本地html c#与js交互_第12张图片

2.使用cefsharp
WPF CefSharp v67 vs2015详细安装使用 嵌入本地html c#与js交互_第13张图片

using System;
using System.Collections.Generic;
using System.Windows;
using Newtonsoft.Json;
using CefSharp;
using System.Linq;

namespace WpfApplication1
{
    /// 
    /// MainWindow.xaml 的交互逻辑
    /// 
    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{"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('');}}sp.innerText='{downloadItem.FullPath.Split('\\').LastOrDefault()} {downloadItem.PercentComplete}%'");
            }

        }
    }
}
//xmlns:cefSharp="clr-namespace:CefSharp.Wpf;assembly=CefSharp.Wpf" 引入命名空间
// 按钮调用js方法
// 创建浏览器

    
        
        
    


WPF CefSharp v67 vs2015详细安装使用 嵌入本地html c#与js交互_第14张图片


你可能感兴趣的:(WPF CefSharp v67 vs2015详细安装使用 嵌入本地html c#与js交互)