使用cefsharp在winform中嵌套瀏覽器
在上一節,我們學習了如何簡單地在winform中嵌入chromium瀏覽器,我在使用這個開發項目時,需要點擊一個按鈕,彈出嵌入瀏覽器的窗體,出現一個問題,就是第一次點擊按鈕可以正常打開瀏覽器,第二次點擊就會出現卡殼,閃退問題。由於對於chromium這個龐大的程序不太了解,上網搜索相關文章解決了該問題:
就是在嵌入瀏覽器的窗體類中不能用Cef.shutdown();需要在調用的主窗體中才能調用Cef.shutdown();,貼一下代碼吧:
主窗體代碼:點擊按鈕會彈出嵌有瀏覽器的窗體
using CefSharp;
using System;
using System.Windows.Forms;
namespace SecondApp
{
public partial class FrmMain : Form
{
public FrmMain()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
FrmSecond frmSecond = new FrmSecond();
frmSecond.Show();
}
//在這最后是否Cef
private void FrmMain_FormClosing(object sender, FormClosingEventArgs e)
{
Cef.Shutdown();
Environment.Exit(0);
}
}
}
//嵌入瀏覽器的窗體:
using CefSharp;
using CefSharp.WinForms;
using System;
using System.Windows.Forms;
namespace SecondApp
{
public partial class FrmSecond : Form
{
public ChromiumWebBrowser chromeBrowser;
public FrmSecond()
{
InitializeComponent();
}
private void FrmSecond_Load(object sender, EventArgs e)
{
// 創建瀏覽器控件
chromeBrowser = new ChromiumWebBrowser("https://blog.csdn.net/xingkongtianyuzhao");
// 將控件添加到窗體
this.Controls.Add(chromeBrowser);
chromeBrowser.Dock = DockStyle.Fill;
}
//初始化瀏覽器並啟動
public void InitializeChromium()
{
try
{
CefSettings settings = new CefSettings();
// 設置是否使用GPU
settings.CefCommandLineArgs.Add("disable-gpu", "1");
// 設置是否使用代理服務
settings.CefCommandLineArgs.Add("no-proxy-server", "1");
// 設置是否啟動js交互,假如需要原生與js方法互調,則需要設置為true
CefSharpSettings.LegacyJavascriptBindingEnabled = true;
// 初始化cef
Cef.Initialize(settings, true, browserProcessHandler: null);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
//窗口關閉
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
chromeBrowser.CloseDevTools();//關閉瀏覽器調試工具
//此方法會同時關閉窗口,我們真只可以直接調用該方法,同時關閉瀏覽器及窗口
chromeBrowser.GetBrowser().CloseBrowser(true);//關閉瀏覽器
//釋放瀏覽器對象
if (chromeBrowser != null && !chromeBrowser.Disposing)
{
chromeBrowser.Dispose();
}
}
}
}
具體源碼參考:
