CefSharp應用——彈窗與右鍵


雖然能用CefSharp將web應用嵌入到窗體程序,但遇到<a >標簽(_blank)會彈出一個窗口,而且在任意位置可以彈出右鍵菜單,需要解決這個問題才像一個真正的客戶端軟件。

不彈子窗體

控制彈窗的接口是ILifeSpanHandler,並實現OnBeforePopup方法。如下:

定義LifeSpanHandler類:

 

using CefSharp;
using CefSharp.WinForms;

namespace CefTest
{
    internal class LifeSpanHandler : ILifeSpanHandler
    {
        //彈出前觸發的事件
        public bool OnBeforePopup(IWebBrowser webBrowser, IBrowser browser, IFrame frame, string targetUrl,
            string targetFrameName, WindowOpenDisposition targetDisposition, bool userGesture, IPopupFeatures popupFeatures,
            IWindowInfo windowInfo, IBrowserSettings browserSettings, ref bool noJavascriptAccess, out IWebBrowser newBrowser)
        {
            //使用源窗口打開鏈接,取消創建新窗口
            newBrowser = null;
            var chromiumWebBrowser = (ChromiumWebBrowser)webBrowser;
            chromiumWebBrowser.Load(targetUrl);
            return true;
        }

        public void OnAfterCreated(IWebBrowser chromiumWebBrowser, IBrowser browser)
        {
           
        }

        public bool DoClose(IWebBrowser chromiumWebBrowser, IBrowser browser)
        {
            return true;
        }

        public void OnBeforeClose(IWebBrowser chromiumWebBrowser, IBrowser browser)
        {
            
        }
    }
}

 

調用方式:

ChromeBrowser.LifeSpanHandler = new LifeSpanHandler();

禁用右鍵

禁用右鍵的接口是IContextMenuHandler,並實現OnBeforeContextMenu 方法。如下:

定義MenuHandler類:

 

using CefSharp;

namespace CefTest
{
    internal class MenuHandler : IContextMenuHandler
    {
        public void OnBeforeContextMenu(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IContextMenuParams parameters,
            IMenuModel model)
        {
            model.Clear();
        }

        public bool OnContextMenuCommand(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IContextMenuParams parameters,
            CefMenuCommand commandId, CefEventFlags eventFlags)
        {
            return false;
        }

        public void OnContextMenuDismissed(IWebBrowser webBrowser, IBrowser browser, IFrame frame)
        {
      
        }

        public bool RunContextMenu(IWebBrowser webBrowser, IBrowser browser, IFrame frame, IContextMenuParams parameters,
            IMenuModel model, IRunContextMenuCallback callback)
        {
            return false;
        }
    }
}

 

調用方式:

ChromeBrowser.MenuHandler = new MenuHandler();


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM