• CefSharp.WinForms ChromiumWebBrowser 阻止打开新的窗口


    直接上代码:↓↓↓↓↓↓↓↓↓↓↓

    首先重写一下 LifeSpanHandler 这个类,我们建立一个新的类 名字叫做 CefLifeSpanHandler 代码如下:

    1. public class CefLifeSpanHandler : ILifeSpanHandler
    2. {
    3. public CefLifeSpanHandler()
    4. {
    5. }
    6. public bool DoClose(IWebBrowser browserControl, IBrowser browser)
    7. {
    8. if (browser.IsDisposed || browser.IsPopup)
    9. {
    10. return false;
    11. }
    12. return true;
    13. }
    14. public void OnAfterCreated(IWebBrowser browserControl, IBrowser browser)
    15. {
    16. }
    17. public void OnBeforeClose(IWebBrowser browserControl, IBrowser browser)
    18. {
    19. }
    20. // 阻止打开新的窗体
    21. public bool OnBeforePopup(IWebBrowser browserControl, IBrowser browser, IFrame frame, string targetUrl, string targetFrameName, WindowOpenDisposition targetDisposition, bool userGesture, IPopupFeatures popupFeatures, IWindowInfo windowInfo, IBrowserSettings browserSettings, ref bool noJavascriptAccess, out IWebBrowser newBrowser)
    22. {
    23. newBrowser = null;
    24. var chromiumWebBrowser = (ChromiumWebBrowser)browserControl;
    25. chromiumWebBrowser.Load(targetUrl);
    26. return true;
    27. }
    28. }

    然后我们在实例化 ChromiumWebBrowser 时同时重新赋值 LifeSpanHandler ,代码如下:

    1. var settings = new CefSettings();
    2. settings.IgnoreCertificateErrors = true;
    3. Cef.EnableHighDPISupport();
    4. Cef.Initialize(settings);
    5. ChromiumWebBrowser Chrome = new ChromiumWebBrowser(url);
    6. // 在这里重新赋值,重写了 LifeSpanHandler ,阻止打开新的窗口
    7. Chrome.LifeSpanHandler = new CefLifeSpanHandler();
    8. Chrome.BrowserSettings = new BrowserSettings()
    9. {
    10. WebGl = CefState.Enabled,
    11. ImageLoading = CefState.Enabled,
    12. RemoteFonts = CefState.Enabled,
    13. AcceptLanguageList = "zh-CN"
    14. };
    15. // 剩下的省略...

    好了代码就到这里了,其它花里胡哨的可以自己去搜索和摸索也可以完全重写 ChromiumWebBrowser , ChromiumWebBrowser 的功能还很强大,这里就需要大家自己研究了,欢迎探讨和分享!

  • 相关阅读:
    MySQL常规练习 .MySQL安装成功后的进入方式
    【带头学C++】----- 七、链表 ---- 7.5 学生管理系统(链表--上)
    Python编程:高效数据处理与自动化任务实践
    题目 1058: 二级C语言-求偶数和
    IDEA 打开项目后看不到项目结构怎么办?
    HTML VUE
    【UML】UML类图
    树的应用 —— 二叉树:二叉树的性质
    【虚拟化】KVM
    React简介---jsx 语法练习
  • 原文地址:https://blog.csdn.net/qq_40729514/article/details/125881881