
正文
TWebBrowser禁止弹出Alert对话框
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
以前介绍过通过编写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







