天天看點

C# (江湖熟手)- Cefsharp 的使用(幾行代碼寫個浏覽器)

安裝

Cefsharp簡介

  • CEF ,全稱Chromium Embedded Framework ,基于谷歌 Chromium項目的開源Web Browser控件,它的主要用途是嵌入了第三方應用以實作浏覽器相關的功能。例如國内的360安全浏覽器的相容模式即IE的核心,極速模式即Chromium核心;最近微軟新推出的Microsoft Edge也是基于Chromium開源項目實作的
  • CefSharp是Cef的C#版本,讓Chromium浏覽器也可嵌入WinForms 中

安裝步驟

  • 第一步:右鍵項目,點選 管理NuGet程式包 , 輸入Cefsharp 關鍵字搜尋, 選擇 CefSharp.WinForms 進行安裝
C# (江湖熟手)- Cefsharp 的使用(幾行代碼寫個浏覽器)

安裝完後,以packages.config中可以看到如下資訊

C# (江湖熟手)- Cefsharp 的使用(幾行代碼寫個浏覽器)
  • 第二步:修改配置管理器,将平台修改為X86或X64,Cef有32和64位之分
C# (江湖熟手)- Cefsharp 的使用(幾行代碼寫個浏覽器)

在 

活動方案解決平台

 下拉,點選建立

C# (江湖熟手)- Cefsharp 的使用(幾行代碼寫個浏覽器)

 選擇 

X86

 ,點選确定,接着關閉即可

C# (江湖熟手)- Cefsharp 的使用(幾行代碼寫個浏覽器)
  • 第三步:編寫代碼,初始化浏覽器
using CefSharp;
using CefSharp.WinForms;
using System.Windows.Forms;

namespace 我的浏覽器
{
    public partial class Form1 : Form
    {
        // 浏覽器對象
        public ChromiumWebBrowser chromeBrowser;
        public Form1()
        {
            InitializeComponent();
         
        }

        public void InitCef()
        {
            //參數設定
            CefSettings settings = new CefSettings();
          //  settings.Locale = "zh-CN";
            // settings.CefCommandLineArgs.Add("disable-gpu", "1");//去掉gpu,否則chrome顯示有問題
            Cef.Initialize(settings);
            //建立執行個體
            chromeBrowser = new ChromiumWebBrowser("https://www.baidu.com");
            // 将浏覽器放入容器中
            this.Controls.Add(chromeBrowser);
            chromeBrowser.Dock = DockStyle.Fill;
        }

        private void Form1_Load(object sender, System.EventArgs e)
        {
            // 初始化浏覽器
            InitCef();
        }
    }
}
           

最終啟動程式,成功通路百度

C# (江湖熟手)- Cefsharp 的使用(幾行代碼寫個浏覽器)

常見疑問

右鍵菜單如何禁用?

  • 設定ChromiumWebBrowser的 MenuHandler屬性即可
  • chromeBrowser.MenuHandler = new MenuHandler();  //禁用右鍵菜單
               

如何添加頁面加載完成回調事件?

  • 設定ChromiumWebBrowser的 FrameLoadEnd 屬性
  • public void InitCef()
    {
    	//參數設定
    	CefSettings settings = new CefSettings();
      //  settings.Locale = "zh-CN";
    	// settings.CefCommandLineArgs.Add("disable-gpu", "1");//去掉gpu,否則chrome顯示有問題
    	Cef.Initialize(settings);
    	//建立執行個體
    	chromeBrowser = new ChromiumWebBrowser("https://www.baidu.com");
    	// 将浏覽器放入容器中
    	this.Controls.Add(chromeBrowser);
    	chromeBrowser.Dock = DockStyle.Fill;
    	//頁面加載完成事件
    	chromeBrowser.FrameLoadEnd += webview_FrameLoadEnd;
    }
    
    private void webview_FrameLoadEnd(object sender, FrameLoadEndEventArgs e)
    {
    	// 代碼
    }
               

浏覽器中的 js如何回調到 winform窗體中?

  • 初始化chromeBrowser對象時,需要事先注冊好回調方法
  • public void InitCef()
    {
    	//參數設定
    	CefSettings settings = new CefSettings();
    	Cef.Initialize(settings);
    	//建立執行個體
    	chromeBrowser = new ChromiumWebBrowser("https://www.baidu.com");
    	
    	// 注冊浏覽器方法
    	chromeBrowser.JavascriptObjectRepository.Settings.LegacyBindingEnabled = true;
    	CefSharpSettings.WcfEnabled = true;
    	chromeBrowser.JavascriptObjectRepository.Register("cefCustomObject", new CefCustomObject(chromeBrowser, this), isAsync: false, options: BindingOptions.DefaultBinder);
    	
    	// 将浏覽器放入容器中
    	this.Controls.Add(chromeBrowser);
    	chromeBrowser.Dock = DockStyle.Fill;
    }
               
    事先建立一個類,專門用來放需要回調的方法
  • internal class CefCustomObject
    {
    
    	// 浏覽器對象
    	private static ChromiumWebBrowser _instanceBrowser = null;
    	// 主窗體
    	private static Form1 _instanceMainForm = null;
    
    
    	public CefCustomObject()
    	{
    	   
    	}
    
    	public CefCustomObject(ChromiumWebBrowser originalBrowser, FrmMain mainForm)
    	{
    		_instanceBrowser = originalBrowser;
    		_instanceMainForm = mainForm;
    	}
    
    
    	public void opencmd()
    	{
    		MessageBox.Show("WX GZH: 程式猿知秋");
    		ProcessStartInfo start = new ProcessStartInfo("cmd.exe", "/c pause");
    		Process.Start(start);
    	}
    	
    }
               

繼續閱讀