CEF拦截js层alert弹窗 OnJSDialog 《转》
一 引言
继承,为 ClientHandler 添加一个父类 CefJSDialogHandler
class ClientHandler : public CefJSDialogHandler 声明,在 ClientHandler 声明以下方法:
public: //CefJSDialogHandler
virtual bool OnJSDialog(CefRefPtr browser,
const CefString& origin_url,
const CefString& accept_lang,
JSDialogType dialog_type,
const CefString& message_text,
const CefString& default_prompt_text,
CefRefPtr callback,
bool& suppress_message) OVERRIDE; // CefClient methods
// Return the handler for JavaScript dialogs. If no handler is provided the
// default implementation will be used. virtual CefRefPtr GetJSDialogHandler() {
return this;
} 实现:
在client_handler_win.cpp 添加以下方法: //tony.guo,重写js alert 框
bool ClientHandler::OnJSDialog(CefRefPtr browser,
const CefString& origin_url,
const CefString& accept_lang,
JSDialogType dialog_type,
const CefString& message_text,
const CefString& default_prompt_text,
CefRefPtr callback,
bool& suppress_message) { if(dialog_type == JSDIALOGTYPE_ALERT)//普通提示框 询问框
{
string strTemp = message_text.ToString();
CString strMsg = _T("");
ConvertUtf8ToGBK(strTemp,strMsg); CCommonDlg dlg;
dlg.setShowText(strMsg);
dlg.setShowIcon();
dlg.setButtonContent(_T(""),_T("确 定"));
dlg.setShowTip(_T("提示")); dlg.DoModal(); suppress_message = true;
return false;
}
else if(dialog_type == JSDIALOGTYPE_CONFIRM)//询问框
{
string strTemp = message_text.ToString();
CString strMsg = _T("");
ConvertUtf8ToGBK(strTemp,strMsg); CCommonDlg dlg;
dlg.setShowText(strMsg);
dlg.setShowIcon();
dlg.setButtonContent(_T("确 定"),_T("取 消"));
dlg.setShowTip(_T("询问")); dlg.DoModal(); if( == dlg.m_nReturnValue)
{
callback->Continue(true,"");
suppress_message = false;
return true;
}
else
{
callback->Continue(false,"");
suppress_message = false;
return true; } }
else if(dialog_type == JSDIALOGTYPE_PROMPT)//输入框,不支持
{
CCommonDlg dlg;
dlg.setShowText(_T("系统不支持prompt形式的提示框"));
dlg.setShowIcon();
dlg.setButtonContent(_T(""),_T("确 定"));
dlg.setShowTip(_T("提示")); dlg.DoModal(); suppress_message = true;
return false;
} return false; } 说明:CCommonDlg 是笔者写的一个提示框,读者也可以用MessageBox代替。ConvertUtf8ToGBK 只是一个字符串处理方法,如下:
void ConvertUtf8ToGBK(string strUtf8,CString &strRet)
{
int len = MultiByteToWideChar(CP_UTF8, , (LPCSTR)strUtf8.c_str(), -, NULL,);
TCHAR * wszGBK = new TCHAR[len+];
ZeroMemory(wszGBK,len+); MultiByteToWideChar(CP_UTF8, , (LPCSTR)strUtf8.c_str(), -, wszGBK, len); strRet.Format(_T("%s"),wszGBK); delete []wszGBK; return; } 参数解释
suppress_message参数: 如果这个参数被设置为true,并且函数返回值为false,将阻止页面打开JS的弹出窗口。 如果这个参数被设置为false,并且函数返回值也是false,页面将会打开这个JS弹出窗口。 message_text参数: 是弹出窗口将要显示的内容 dialogType参数: 是弹出窗口的类型(alert,confirm,Prompt) callback参数: 当用户点击了弹出窗口的确定按钮,可以用callback.Continue(true, string.Empty);回调确定函数 当用户点击了弹出窗口的取消按钮,可以用callback.Continue(false, string.Empty);回调取消函数 五 测试
在测试页面实现如下代码: function AlertTest() {
//alert('弹框测试'); if(confirm('您同意吗?'))
{
alert('同意');
}
}
CEF拦截js层alert弹窗 OnJSDialog 《转》的更多相关文章
- 原生 js 模拟 alert 弹窗
复制头部的 js 代码到你的 js 文件的任何地方,调用Chef.alert方法传入相应的参数即可并没有什么功能,只是一个提示的作用,可能样式比 alert 的弹窗好看点,css是写在js里的,只要你 ...
- js重写alert()弹窗
//重写alertwindow.alert = function(str){ var alertFram = document.getElementById('alertFram'); var shi ...
- JS重写alert,保证弹窗错误的友好性
// ------------------------------------------------------------- // 重写alert,保证弹窗错误的友好性 var j_oldAler ...
- 移动端开发(使用webuploader上传图片,客户端交互,修改alert弹窗等)
之前实习做的一个移动端的页面 需要的功能有图片上传 点击客户端的返回按钮 有提示(即与客户端有交互) 遇到不少的坑 总结一下问题 1.图片上传功能 使用工具 百度的webuploader 暂时遇到的 ...
- 修改js confirm alert 提示框文字的简单实例
修改js confirm alert 提示框文字的简单实例: <!DOCTYPE html> <html> <head lang="en"> & ...
- react.js插件开发,x-dailog弹窗浮层组件
react.js插件开发,x-dailog弹窗浮层组件 我认为,每一个组件都应该有他自带的样式和属性事件回调配置.所以我会给x-dialog默认一套简单的样式,和各种默认的配置项.所有react插件示 ...
- CEF和JS交互
CefClient提供所有浏览器事件处理的接口,重写CefClient类中的方法处理浏览器事件:包括Browser的生命周期,右键菜单,对话框,状态通知显示,下载事件,拖曳事件,焦点事件,键盘事件,离 ...
- Python+Selenium练习篇之20-处理Alert弹窗
本文来介绍如何通过Selenium方法去处理网页Alert弹窗,和处理iframe类似,都是通过switch_to方法.这里还是没有找到合适的alert弹窗网站,我们就自己创建一个吧,前面文章介绍了如 ...
- 基于React.js网页版弹窗|react pc端自定义对话框组件RLayer
基于React.js实现PC桌面端自定义弹窗组件RLayer. 前几天有分享一个Vue网页版弹框组件,今天分享一个最新开发的React PC桌面端自定义对话框组件. RLayer 一款基于react. ...
随机推荐
- ORACLE SQL 笔记
根据数据权限查询 SELECT * FROM ( SELECT ROWNUM AS ROWNO, AA.* FROM ( SELECT DISTINCT A.OBJECTID InstanceID , ...
- Redis_初识
一.简介 Redis(Remote Dictionary Server)本质上是一个Key-Value类型的内存数据库,整个数据库统统加载在内存当中进行操作,定期通过异步操作吧数据库flush到硬盘上 ...
- 五、Linux_ping命令
ping命令用法为:“ping 参数 目标主机”.其中参数为零到多个,目标主机可以是IP或者域名. 1.每隔0.6秒ping一次,一共ping 5次: [root@aiezu.com ~]# ping ...
- 树莓派3b安装opencv
前言:最近买了一个CSI接口的摄像头,最准用树莓派做人脸识别项目.树莓派上本身已经安装了python2.python3,最开始通过sudo apt-get install python3-opencv ...
- gcc的__builtin_函数(注意前面是两个下划线)
说明: GCC provides a large number of built-in functions other than the ones mentioned above. Some of t ...
- (MYSQL)回表查询原理,利用联合索引实现索引覆盖
一.什么是回表查询? 这先要从InnoDB的索引实现说起,InnoDB有两大类索引: 聚集索引(clustered index) 普通索引(secondary index) InnoDB聚集索引和普通 ...
- Kotlin异常与Java异常的区别及注解详解
Kotlin异常与Java异常的区别: throw的Kotlin中是个表达式,这样我们可以将throw作为Elvis表达式[val test = aa ?: bb,这样的则为Elvis表达式,表示如果 ...
- 完成下方的 which_date() 函数,并返回某一起始时间后特定一段时间的日期
from datetime import datetime,timedelta import re def which_date(start_date,time): """ ...
- [Javascript] Check Promise is Promise
const isPromise = obj => Boolean(obj) && typeof obj.then === 'function'; This can be a to ...
- CLR内部异常(下)
直接使用SEH 有些情况里直接使用SEH会更合适一些.特别是,如果需要在第一次遍历(first pass - SEH异常处理流程里的第一遍处理)时需要执行某些操作时,也就是在堆栈向上展开之前,SEH是 ...