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.新建项目
新建项目

2.新建编译设定
解决方案-右键-最下面“属性”选项

点击左侧配置属性-再点击右上角配置管理器

在这里插入图片描述

点击新建-点击确定 再新建-再确定 so easy
在这里插入图片描述
同理再操作一次
这里选86或64随意
接下来就1-2-3
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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>

在页面里引用js 直接在页面上写也行

<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>

猜你喜欢

转载自blog.csdn.net/qq_35955916/article/details/84189444