zoukankan      html  css  js  c++  java
  • [Winform]Cefsharp重写alert与confirm弹窗

    摘要

    在使用winform内嵌cefsharp浏览本地页面的时候,如果出现alert弹窗,会在标题栏显示页面所在目录。所以想起来重写alert的样式,通过winform的MessageBox进行提示。

    解决办法

    这里有必要提一下,使用的cefsharp版本,因为不同的版本,参数有所变化。

    cefsharp:57.0.0.0

    添加类JsDialogHandler,实现接口CefSharp.IJsDialogHandler

       class JsDialogHandler : CefSharp.IJsDialogHandler
        {
    
            public void OnDialogClosed(CefSharp.IWebBrowser browserControl, CefSharp.IBrowser browser)
            {
    
            }
    
            public bool OnJSBeforeUnload(CefSharp.IWebBrowser browserControl, CefSharp.IBrowser browser, string message,
    bool isReload, CefSharp.IJsDialogCallback callback) { return true; } public bool OnJSDialog(CefSharp.IWebBrowser browserControl, CefSharp.IBrowser browser,
    string originUrl, CefSharp.CefJsDialogType dialogType, string messageText, string defaultPromptText,
    CefSharp.IJsDialogCallback callback, ref bool suppressMessage) { switch (dialogType) { case CefSharp.CefJsDialogType.Alert: MessageBox.Show(messageText, "提示"); suppressMessage = true; return false; case CefSharp.CefJsDialogType.Confirm: var dr = MessageBox.Show(messageText, "提示", MessageBoxButtons.YesNo); if (dr == DialogResult.Yes) { callback.Continue(true, string.Empty); suppressMessage = false; return true; } else { callback.Continue(false, string.Empty); suppressMessage = false; return true; } break; case CefSharp.CefJsDialogType.Prompt: MessageBox.Show("系统不支持prompt形式的提示框", "提示"); break; default: break; } return false; } public void OnResetDialogState(CefSharp.IWebBrowser browserControl, CefSharp.IBrowser browser) { } }

    初始化browser时,将自定义的弹窗注册上

      _browser = new CefSharp.WinForms.ChromiumWebBrowser(url)
                            {
                                BrowserSettings =
                                {
                                    DefaultEncoding = "UTF-8"
                                },
                                MenuHandler = new MenuHandler(),
                                LifeSpanHandler = new OpenPageSelf(),
                                JsDialogHandler = new JsDialogHandler(),
                                Dock = DockStyle.Fill,
                            };

    测试

    总结

    之前通过js调用c#方法实现,结果不太满意,发现如果程序全屏遮盖任务的情况下,弹框只会出现在任务栏,而不会在页面上显示。造成阻塞,在页面上无法做其他的操作。

  • 相关阅读:
    【宋红康程序思想学习日记5】数组排序之冒泡法
    求割点 poj 1523
    网络流 poj 3308 最小割
    网络流最小割 POJ 3469
    网络流 POJ2112
    网络流 HDU 3605
    网络流HDU 2883
    网络流 最大流HDU 3549
    微信公众平台开发者中心服务器配置Token验证失败问题
    排列熵算法简介及c#实现
  • 原文地址:https://www.cnblogs.com/wolf-sun/p/7405761.html
Copyright © 2011-2022 走看看