【CefSharp】 禁用右鍵菜單 與 控制彈出窗口的方式(限版本39.0.0.1)

這周沒什麼時間,一開始就在忙一些CefSharp的事情,Win10的研究就放了下來,CefSharp的資料挺少的,但好在是開源的,可以我們便宜的折騰。因爲兩個的內容都不多,我就合成一篇文章啦。

這還裏還要吐嘈一下WinForm,也可能是WPF玩的年頭長了,覺得WinForm真TNND的難用呀,弄幾個定義的控件,相當之麻煩。

迴歸正文。

 

因爲新版本中接口發生了變化,該文章只適用於39.0.0.1。

一、禁用右鍵菜單

禁用右鍵菜單其實是很容易的。主就要是實現一個接口 IMenuHandler,這個接口有一個 OnBeforeContextMenu的方法,我們在這裏讓返回一個false,右鍵菜單就消失了。

    internal class MenuHandler : IMenuHandler
    {
        public bool OnBeforeContextMenu(IWebBrowser browser, IContextMenuParams parameters)
        {
            return false;
        }
    }

再將這個對像的實例賦給ChromiumWebBrowser對象的MenuHandler屬性上就OK啦。

var browser = new ChromiumWebBrowser(url);
browser.MenuHandler = new MenuHandler();

 

二、控制彈出窗口的方式

在CefSharp,如果打開一個網頁,如果這網頁要在新窗口開打,他真的會彈出一個新的窗口,但是這個窗口並不受我的們控制,比如,我們要強制在當前瀏覽器顯示、我們要在一個TabControl的標籤中顯示,我們要一個自己風格的窗口。而且在WPF中,彈出的竟然是一個Form的窗口,WPF的同學是不是感到深深的內傷。

控制彈出窗口有到的接口:ILifeSpanHandler,

方法兩個:OnBeforeCloseOnBeforePopup

控件彈出窗口主要是用到了 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線程。

 

本文地址:http://www.cnblogs.com/gaoshang212/p/4551431.html 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章