這周沒什麼時間,一開始就在忙一些CefSharp的事情,Win10的研究就放了下來,CefSharp的資料挺少的,但好在是開源的,能夠咱們便宜的折騰。由於兩個的內容都很少,我就合成一篇文章啦。html
這還裏還要吐嘈一下WinForm,也多是WPF玩的年頭長了,以爲WinForm真TNND的難用呀,弄幾個定義的控件,至關之麻煩。瀏覽器
迴歸正文。url
由於新版本中接口發生了變化,該文章只適用於39.0.0.1。spa
1、禁用右鍵菜單線程
禁用右鍵菜單實際上是很容易的。主就要是實現一個接口 IMenuHandler,這個接口有一個 OnBeforeContextMenu的方法,咱們在這裏讓返回一個false,右鍵菜單就消失了。code
internal class MenuHandler : IMenuHandler { public bool OnBeforeContextMenu(IWebBrowser browser, IContextMenuParams parameters) { return false; } }
再將這個對像的實例賦給ChromiumWebBrowser對象的MenuHandler屬性上就OK啦。orm
var browser = new ChromiumWebBrowser(url); browser.MenuHandler = new MenuHandler();
2、控制彈出窗口的方式htm
在CefSharp,若是打開一個網頁,若是這網頁要在新窗口開打,他真的會彈出一個新的窗口,可是這個窗口並不受個人們控制,好比,咱們要強制在當前瀏覽器顯示、咱們要在一個TabControl的標籤中顯示,咱們要一個本身風格的窗口。並且在WPF中,彈出的居然是一個Form的窗口,WPF的同窗是否是感到深深的內傷。對象
控制彈出窗口有到的接口:ILifeSpanHandler,blog
方法兩個:OnBeforeClose,OnBeforePopup
控件彈出窗口主要是用到了 OnBeforePopup,它也有一個Boolean的返回值,當這個值爲true的時候,CefSharp就不本身彈出窗口了,在這裏,咱們就能夠偷偷的作本身的事情了。
internal class LifeSpanHandler : ILifeSpanHandler { public void OnBeforeClose(IWebBrowser browser) { } public bool OnBeforePopup(IWebBrowser browser, string sourceUrl, string targetUrl, ref int x, ref int y, ref int width, ref int height) {
//在這裏,能夠作你想作的事情哦 return true; } }
再將這個對像的實例賦給LifeSpanHandler屬性上就OK啦。
var browser = new ChromiumWebBrowser(url); browser.LifeSpanHandler = new LifeSpanHandler();
注:在接口的這個方法觸發時,並不在STA線程,若是要對UI有操做的話,要回到UI線程。