• 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 的功能还很强大,这里就需要大家自己研究了,欢迎探讨和分享!

  • 相关阅读:
    PWM实验
    低代码开发是未来软件开发的主流模式
    Android多网络并存
    CentOS命令大全
    Java进阶教程(一)关键字
    我要写整个中文互联网界最牛逼的JVM系列教程 | 「JVM与Java体系架构」章节:区分栈的指令集架构和寄存器的指令集架构
    本地JS文件批量压缩
    Spring事务失效的各种场景
    C#学习系列相关之多线程(四)----async和await的用法
    第十四届蓝桥杯(web应用开发)模拟赛2期 -大学组
  • 原文地址:https://blog.csdn.net/qq_40729514/article/details/125881881