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. ...
随机推荐
- Pytorch 张量维度
Tensor类的成员函数dim()可以返回张量的维度,shape属性与成员函数size()返回张量的具体维度分量,如下代码定义了一个两行三列的张量: f = torch.randn(2, 3) pri ...
- IDEA配置自己的注释
File-->Setting-->Live Templates,点击+,选择2.Template Group... 创建Group,我的命名为MyAnnotation,然后选中MyAnnt ...
- time的基本使用介绍
1.获取当前时间并格式化输出 import time t=time.gmtime() tplt='%Y-%m-%d %H:%M:%S' info=time.strftime(tplt,t) print ...
- linux上SVN出现 "Unable to connect to a repository at URL 'svn://xx.xx.xx.xx/xxx' 和 No repository ...
centos上安装了svn, 有时候会不知道什么原因出现客户端小乌龟无法连接或无法提交等情况. 1. 万能重启,xshell连接服务器,输入 service svnserve restart 命令. ...
- jquery选择器之全选择器
在CSS中,经常会在第一行写下这样一段样式 * {padding: 0; margin: 0;} 通配符*意味着给所有的元素设置默认的边距.jQuery中我们也可以通过传递*选择器来选中文档页面中的元 ...
- moviepy草码
第一下. # coding=utf-8 from moviepy.editor import * from moviepy.video.tools.subtitles import Subtitles ...
- 小程序页面收录 sitemap
微信现已开放小程序内搜索,你的小程序页面将可能展示在微信搜索等多个公开场景中.当开发者允许微信索引时,微信会通过爬虫的形式,为小程序的页面内容建立索引. 若小程序中存在不适合展示信息如用户个人信息.商 ...
- P4160 [SCOI2009]生日快乐[dfs]
题目描述 windy的生日到了,为了庆祝生日,他的朋友们帮他买了一个边长分别为 X 和 Y 的矩形蛋糕. 现在包括windy,一共有 N 个人来分这块大蛋糕,要求每个人必须获得相同面积的蛋糕. win ...
- 编程小白入门分享三:Spring AOP统一异常处理
Spring AOP统一异常处理 简介 在Controller层,Service层,可能会有很多的try catch代码块.这将会严重影响代码的可读性."美观性".怎样才可以把更多 ...
- Python常用标准库函数
math库: >>> import math >>> dir(math) ['__doc__', '__loader__', '__name__', '__pack ...