赞
踩
CEF ,全称Chromium Embedded Framework ,基于谷歌 Chromium项目的开源Web Browser控件,它的主要用途是嵌入了第三方应用以实现浏览器相关的功能。例如国内的360安全浏览器的兼容模式即IE的内核,极速模式即Chromium内核;最近微软新推出的Microsoft Edge也是基于Chromium开源项目实现的
CefSharp是Cef的C#版本,让Chromium浏览器也可嵌入WinForms 中link
大家可以看个简单的简介即可,因为我都项目是WPF+CefSharp,并且我希望我的项目能在Win7上运行,所以对CefSharp的包有版本要求:
- CefSharp.Wpf.NETCore @109.1.110
- CefSharp.Common.NETCore @109.1.110
- 使用前记得将.netcore项目的运行平台都改成Windows
- 勾选 为该项目启用Windows窗体
我在这里直接创建了个UserControl
就写了简单的初始化事件、界面元素增加了Grid
<UserControl x:Class="WPF.NetCore.Startup.Control.MainBrowser" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:WPF.NetCore.Startup.Control" mc:Ignorable="d" d:DesignHeight="450" d:DesignWidth="800" xmlns:prism="http://prismlibrary.com/" prism:ViewModelLocator.AutoWireViewModel="True" xmlns:b="http://schemas.microsoft.com/xaml/behaviors" > <b:Interaction.Triggers> <b:EventTrigger EventName="Loaded"> <b:InvokeCommandAction Command="{Binding Loaded}" /> </b:EventTrigger> </b:Interaction.Triggers> <Grid x:Name="cefWebBrowserGrid"> </Grid> </UserControl>
直接复制即可
- 初始化了CefSharp的配置信息
- 将ChromiumWebBrowser 组件添加至页面的Gird元素中
- 增加了chrom插件的键盘点击事件(可不加,我增加了F5刷新及F12打开管理者调试工具)
using CefSharp; using CefSharp.Wpf; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using WPF.NetCore.Startup.Handler; namespace WPF.NetCore.Startup.Control { /// <summary> /// MainBrowser.xaml 的交互逻辑 /// </summary> public partial class MainBrowser : UserControl { public MainBrowser() { InitializeComponent(); this.Loaded += Init; } public ChromiumWebBrowser cefWebBrowser; /// <summary> /// 初始化加载 /// </summary> /// <param name="obj"></param> /// <param name="args"></param> private void Init(object obj,EventArgs args) { CefSettings cefSettings = new CefSettings(); cefSettings.CefCommandLineArgs.Add("no-proxy-server", "1"); cefSettings.CefCommandLineArgs.Add("disable-gpu", "1"); cefSettings.CefCommandLineArgs.Add("proxy-server", "ProxyAddress"); cefSettings.CefCommandLineArgs.Add("disable-pinch", "1"); cefSettings.CefCommandLineArgs.Add("enable-media-stream", "1"); cefSettings.CefCommandLineArgs.Add("enable-system-flash", "1"); cefSettings.CefCommandLineArgs.Add("enable-speech-input", "1"); Cef.Initialize(cefSettings); cefWebBrowser = new ChromiumWebBrowser(); cefWebBrowser.JavascriptObjectRepository.Settings.LegacyBindingEnabled = true; this.cefWebBrowser.KeyboardHandler = new CEFKeyBoardHander(); this.cefWebBrowser.Visibility = Visibility.Visible; this.cefWebBrowser.Load("http://www.baidu.com"); this.cefWebBrowser.FrameLoadEnd += new EventHandler<FrameLoadEndEventArgs>(this.CefWebBrowser_FrameLoadEnd); this.cefWebBrowserGrid.Children.Add(this.cefWebBrowser);//添加控件 } private void CefWebBrowser_FrameLoadEnd(object sender, FrameLoadEndEventArgs e) { } } }
using CefSharp; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WPF.NetCore.Startup.Handler { public class CEFKeyBoardHander : IKeyboardHandler { public bool OnKeyEvent(IWebBrowser browserControl, IBrowser browser, KeyType type, int windowsKeyCode, int nativeKeyCode, CefEventFlags modifiers, bool isSystemKey) { if (type == KeyType.KeyUp && Enum.IsDefined(typeof(Keys), windowsKeyCode)) { var key = (Keys)windowsKeyCode; switch (key) { case Keys.F12: browser.ShowDevTools(); break; case Keys.F5: if (modifiers == CefEventFlags.ControlDown) { //MessageBox.Show("ctrl+f5"); browser.Reload(true); //强制忽略缓存 } else { //MessageBox.Show("f5"); browser.Reload(); } break; } } return false; } public bool OnPreKeyEvent(IWebBrowser browserControl, IBrowser browser, KeyType type, int windowsKeyCode, int nativeKeyCode, CefEventFlags modifiers, bool isSystemKey, ref bool isKeyboardShortcut) { return false; } } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。