以前介绍过通过编写Webbrowser1的OnDocumentComplete事件响应代码可以拦截网页弹出的Alert等对话框,代码如下:

procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
  ((Sender as TWebBrowser).Document as IHtmlDocument2).parentWindow.execScript('window.alert=function(){}', 'javascript');
end;


是此方法对于含有框架的网页,而Alert对话框又是由子框架中的网页脚本弹出的,是无法拦截的。原因是:虽然每个框架网页文档加载完成都会引发
OnDocumentComplete事件,但传入的Sender参数始终是WebBrowser1本身,该事件响应代码对子框架中的网页文档无效。注意
到传入的第二个参数pDisp是包含了加载完成的框架的接口,通过这个接口可以获取框架网页的文档的引用,所以利用该参数进行处理就能真正拦截网页弹出的
Alert对话框,具体代码如下:

procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
var
  iWB: IWebBrowser2;
begin
  if pDisp.QueryInterface(IID_IWebBrowser2, iWB) = s_ok then
  begin
    (iWB.Document as IHTmlDocument2).parentWindow.execScript('window.alert=function(){}','javascript');
  end;
end;

以上代码需引用单元:MsHtml

TWebBrowser禁止弹出Alert对话框的更多相关文章

  1. win32 进程崩溃时禁止弹出错误对话框

    在程序初始化的时候加入以下代码即可: SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX);    _set_abort_behav ...

  2. asp.net 关于Response.Redirect重定向前无法弹出alert对话框的问题

    要实现的功能:某项操作后,使用alert()提示框提示"操作成功"之类的提示,然后使用response.Redirect()来进行页面重定向. 出现的问题:运行代码,操作完成后,直 ...

  3. js点击a链接弹出alert对话框

    代码 <html> <head> <meta charset="utf-8"> <meta name="generator&qu ...

  4. C# 禁止 Webbrowser 控件的弹出脚本错误对话框

    当IE浏览器遇到脚本错误时浏览器,左下 角会出现一个黄色图标,点击可以查看脚本错误的详细信息,并不会有弹出的错误信息框.当我们使用 WebBrowser控件时有错误信息框弹出,这样程序显的很不友好,而 ...

  5. 弹出消息对话框ScriptManager

    //直接调用WebMessageBox方法 #region 弹出消息对话框 /// <summary> /// 弹出消息对话框 /// </summary> /// <p ...

  6. 每日学习心得:CustomValidator验证控件验证用户输入的字符长度、Linq 多字段分组统计、ASP.NET后台弹出confirm对话框,然后点击确定,执行一段代码

    2013-9-15 1.    CustomValidator验证控件验证用户输入的字符长度 在实际的开发中通常会遇到验证用户输入的字符长度的问题,通常的情况下,可以写一个js的脚本或者函数,在ASP ...

  7. jQuery Dialog弹出层对话框插件

    Dialog.js的相关注释已经添加,可以按照注释,进行相关样式的修改,适用于自定义的各个系统! dialog.js /** * jQuery的Dialog插件. * * @param object ...

  8. ASP.net后台弹出消息对话框的方法!【转】

          在winform后台,我们通过MessageBox.show(“消息")的方式来返回后台信息,在webform后台,我们通过Response.write(”消息")来返 ...

  9. JavaScript三在弹出的对话框中

    据悉js小伙伴会发现,我们在某些情况下使用的alert()办法.prompt()办法.prompt()办法.它们在屏幕上的对话框.容,使用这样的方法使得页面的交互性更精彩.实际上我们常常会在进行网页浏 ...

随机推荐

  1. eclipse安装、汉化、搭建安卓开发环境

    1.eclipse与jdk的位数(32bit or 64bit )要对应,否则会提示Failed to load JNI shared library.提示这一种错误据说还有另外一种原因就是Path路 ...

  2. Oracle 存储过程起步

    存储过程的注释不能写在第一行 select后面要有into create or replace procedure DelEmp(v_empno in emp.empno%type) AS No_re ...

  3. PopupWindows 在2.3.3下报java.lang.NullPointerException

    03-05 01:20:56.040: E/AndroidRuntime(1396): java.lang.NullPointerException 03-05 01:20:56.040: E/And ...

  4. 循环语句中,break和continue分别有什么作用?

    break用于强行退出循环,不执行循环中剩余的语句 continue用于跳过本次循环, 不执行continue后的语句, 继续下一次循环

  5. sqlserver创建数据库

    --指向当前要使用的master数据库,向master数据库中注册创建信息 use master go --创建数据库 create database StudentManageDB on prima ...

  6. tf.nn.embedding_lookup

    tf.nn.embedding_lookup(params, ids, partition_strategy=’mod’, name=None, validate_indices=True, max_ ...

  7. 使用命名管道的OVERLAPPED方式实现非阻塞模式编程 .

    命令管道是进程间通讯的一种常用方式,对于命令管道的介绍可以参考别的资料和书籍,这里推荐一个<VC++下命名管道编程的原理及实现>这篇博文,写得比较清楚.但是都是介绍了阻塞模式的编程,我这里 ...

  8. Echarts动态加载饼状图的实例

    一.引入echarts.js文件(下载页:http://echarts.baidu.com/download.html) 二.HTML代码: <div style="width: 10 ...

  9. ASCII、Unicode和UTF-8

    转自廖雪峰的官方网站:https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/00138 ...

  10. 关于QT编译错误问题

    这里的意思是出现QT编译错误: 1.之前编译没问题,突然就报错了,而且错误根本不知道啥玩意. 2.编译出现不能自动更新,比如更改ui但是编译之后没该改变. ... 解决方法: 1.删除Makefile ...