CefSharp winform谷歌浏览器控件禁止弹窗与右键

虽然能用CefSharp将web应用嵌入到窗体程序,但遇到<a >标签(_blank)会弹出一个窗口,而且在任意位置可以弹出右键菜单,

需要解决这个问题才像一个真正的客户端软件。

不弹子窗体

控制弹窗的接口是ILifeSpanHandler,并实现OnBeforePopup方法。如下:

定义LifeSpanHandler类:

C#代码
  1. using CefSharp;  
  2. using CefSharp.WinForms;  
  3.   
  4. namespace CefTest  
  5. {  
  6.     internal class LifeSpanHandler : ILifeSpanHandler  
  7.     {  
  8.         //弹出前触发的事件  
  9.         public bool OnBeforePopup(IWebBrowser webBrowser, IBrowser browser, IFrame frame, string targetUrl,  
  10.             string targetFrameName, WindowOpenDisposition targetDisposition, bool userGesture, IPopupFeatures popupFeatures,  
  11.             IWindowInfo windowInfo, IBrowserSettings browserSettings, ref bool noJavascriptAccess, out IWebBrowser newBrowser)  
  12.         {  
  13.             //使用源窗口打开链接,取消创建新窗口  
  14.             newBrowser = null;  
  15.             var chromiumWebBrowser = (ChromiumWebBrowser)webBrowser;  
  16.             chromiumWebBrowser.Load(targetUrl);  
  17.             return true;  
  18.         }  
  19.   
  20.         public void OnAfterCreated(IWebBrowser chromiumWebBrowser, IBrowser browser)  
  21.         {  
  22.              
  23.         }  
  24.   
  25.         public bool DoClose(IWebBrowser chromiumWebBrowser, IBrowser browser)  
  26.         {  
  27.             return true;  
  28.         }  
  29.   
  30.         public void OnBeforeClose(IWebBrowser chromiumWebBrowser, IBrowser browser)  
  31.         {  
  32.               
  33.         }  
  34.     }  
  35. }  

 调用方式

C#代码
  1. using CefSharp;using CefSharp.WinForms;  
  2.   
  3. namespace LawSever  
  4. {  
  5.     public partial class frmweb : Form  
  6.     {  
  7.         public frmweb()  
  8.         {  
  9.             InitializeComponent();  
  10.             InitBrowser();  
  11.         }  
  12.         public ChromiumWebBrowser browser;  
  13.         public void InitBrowser()  
  14.         {       //Cef.Initialize(new CefSettings());//亲测这句代码 可不执行 也好用  
  15.             browser = new ChromiumWebBrowser("https://ai.12348.gov.cn/pc/");  
  16.   
  17.             browser.LifeSpanHandler = new LifeSpanHandler();//超链接不弹新窗体  
  18.   
  19.             this.panel1.Controls.Add(browser);//panel      
  20.         }  
  21. }  

禁用右键

禁用右键的接口是IContextMenuHandler,并实现OnBeforeContextMenu 方法。如下:

定义MenuHandler类:

C#代码
  1. using CefSharp;  
  2.   
  3. namespace CefTest  
  4. {  
  5.     internal class MenuHandler : IContextMenuHandler  
  6.     {  
  7.         public void OnBeforeContextMenu(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IContextMenuParams parameters,  
  8.             IMenuModel model)  
  9.         {  
  10.             model.Clear();  
  11.         }  
  12.   
  13.         public bool OnContextMenuCommand(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IContextMenuParams parameters,  
  14.             CefMenuCommand commandId, CefEventFlags eventFlags)  
  15.         {  
  16.             return false;  
  17.         }  
  18.   
  19.         public void OnContextMenuDismissed(IWebBrowser webBrowser, IBrowser browser, IFrame frame)  
  20.         {  
  21.         
  22.         }  
  23.   
  24.         public bool RunContextMenu(IWebBrowser webBrowser, IBrowser browser, IFrame frame, IContextMenuParams parameters,  
  25.             IMenuModel model, IRunContextMenuCallback callback)  
  26.         {  
  27.             return false;  
  28.         }  
  29.     }  
  30. }  

调用方式:

C#代码
  1. ChromeBrowser.MenuHandler = new MenuHandler();  

 



上一篇: vb.net判断重复文本并提取
下一篇: NameCheap.com域名续费优惠码
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: c#
相关日志:
评论: 0 | 引用: 0 | 查看次数: 280
发表评论
昵 称:
密 码: 游客发言不需要密码.
邮 箱: 邮件地址支持Gravatar头像,邮箱地址不会公开.
网 址: 输入网址便于回访.
内 容:
验证码:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 开启 | [img]标签 关闭

 广告位

↑返回顶部↑