摘要

在使用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#方法实现,结果不太满意,发现如果程序全屏遮盖任务的情况下,弹框只会出现在任务栏,而不会在页面上显示。造成阻塞,在页面上无法做其他的操作。

[Winform]Cefsharp重写alert与confirm弹窗的更多相关文章

  1. Cef 重写alert与confirm弹窗

    在使用form内嵌cef浏览本地页面的时候,如果出现alert弹窗,会在标题栏显示页面所在目录.所以想起来重写alert的样式,通过MessageBox进行提示,或者自己写一个弹窗. 以下代码基于 3 ...

  2. JS重写alert,保证弹窗错误的友好性

    // ------------------------------------------------------------- // 重写alert,保证弹窗错误的友好性 var j_oldAler ...

  3. phantomjs处理alert、confirm弹窗

    一:phantomjs处理alert弹窗 脚本实现功能为:点击click me按钮弹出弹窗消息为cheese,点击确定按钮,弹窗关闭 脚本代码为:注意的是phantomjs处理alert弹窗需要将ph ...

  4. 重写Alert和confirm方法去除地址显示

    //重写alert方法,去掉地址显示window.alert = function(name){var iframe = document.createElement("IFRAME&quo ...

  5. js重写alert()弹窗

    //重写alertwindow.alert = function(str){ var alertFram = document.getElementById('alertFram'); var shi ...

  6. java+selenium自动化遇到confirm弹窗,出现NoAlertPresentException: no alert open

    //操作js的confirm弹窗,bool控制是否点击确定,true为点击确定,false为点击取消 public static void OperaterJSOfConfirm(WebDriver ...

  7. jQuery插件css3动画模拟confirm弹窗

    相比浏览器自带的alert.confirm,能力所及,我更喜欢所有的东西都是自定义:首先在head标签(当然喜欢其他地方自己看着办)内引入插件样式表和js.<link rel="sty ...

  8. 重写alert方法,去掉地址显示

    //重写alert方法,去掉地址显示window.alert = function(name){ var iframe = document.createElement("IFRAME&qu ...

  9. selenium+Python(alert 、confirm 、prompt 的处理)

    alert\confirm\prompt 弹出框操作主要方法有: text  返回 alert/confirm/prompt 中的文字信息 accept  点击确认按钮 dismiss 点击取消按钮, ...

随机推荐

  1. Hacking Using Beef-Xss

    1.环境 hacker:192.168.133.128 os:Kali victims:192.168.133.1    os:win8 2.前期配置 首先进入beef-xss主目录,编辑配置文件,将 ...

  2. python之celery使用详解(二)

    前言 前面我们了解了celery的基本使用后,现在对其常用的对象和方法进行分析. Celery对象 核心的对象就是Celery了,初始化方法: class Celery(object): def __ ...

  3. memcache 键名的命名规则以及和memcached的区别

    2014年3月27日 07:47:46 Keys---- Data stored by memcached is identified with the help of a key. A keyis ...

  4. idea项目左边栏只能看到文件看不到项目结构

    1.点击file->project structure..->Modules 点击右上角+加号 ->import Modules 2.选择你的项目,点击确定 3.在如下页面选择imp ...

  5. idea如何导入一个maven项目

    1.import project 2.选择maven项目 3.选择第二个external moudle,选择maven, 4.点击next,一次点击1,2,3,4 5.设置maven环境 6.点击ok ...

  6. 【linux】sed -e 's/-//g'

    sed是用来处理文本的 s/正则表达式/替换字符串/    :表示将正则表达式的内容替换为后面的字符串 g    :表示替换全部,即如果不加g,则只会替换第一个 -e    :多点编辑(这个没懂) 例 ...

  7. tispark部署步骤

    正常在我们的环境使用tidb集群,都默认没有spark集群的,但之前部署tidb的时候,spark默认已经和系统编译,下面我们的工作就是搭建spark集群和tikv融合 官方是要我们下载tispark ...

  8. 打FFT时中发现的卡常技巧

    题目:洛谷P1919 A*B Problem 加强版 我的代码完全借鉴boshi,然而他380ms我880ms...于是我通过彻底的卡(chao)常(dai)数(ma)成功优化到了380ms,都是改了 ...

  9. 数学之美——HMM模型(二)解码和Forward算法

    上一篇讨论了HMM的基本概念和一些性质,HMM在现实中还是比较常见的,因此也带来一了一系列的HMM应用问题.HMM应用主要面向三个方面:预测.解码和学习.这篇主要讨论预测. 简单来说,预测就是给定HM ...

  10. VSCode配置简单的vue项目

    VSCode配置简单的vue项目 https://www.cnblogs.com/wnxyz8023/p/9989447.html 由于最近要使用的项目框架为前后端分离的,采用的是vue.js+web ...