Delphi TWebBrowser[10] 防止弹出新窗口的几个方法
Delphi TWebBrowser[10] 防止弹出新窗口的几个方法
1、方法1
uses MsHTML; WebBrowser1.Silent:=True; //可以防止弹出“语法错误”的窗口。 procedure TForm1.WebBrowser1NewWindow2(ASender: TObject; var ppDisp: IDispatch; var Cancel: WordBool); begin Cancel := True; //可以阻止<a href='url' target='_blank'>方式的新窗口 end; procedure TForm1.WebBrowser1NavigateComplete2(ASender: TObject; //阻止Javascript脚本弹出的新窗口 const pDisp: IDispatch; var URL: OleVariant); begin ((aSender as TWebBrowser).Document as IHTMLDocument2).parentWindow.execScript('window.open=function(){return true}','JavaScript'); //禁止使用open方式弹出的窗口 ((aSender as TWebBrowser).Document as IHTMLDocument2).parentWindow.execScript('window.alert=function(){return true}','JavaScript'); //禁止使用alert方式弹出的对话框 ((aSender as TWebBrowser).Document as IHTMLDocument2).parentWindow.execScript('window.showModalDialog=function(){return true}','JavaScript'); //禁止使用showModalDialog方式弹出的窗口 ((aSender as TWebBrowser).Document as IHTMLDocument2).parentWindow.execScript('window.showModelessDialog=function(){return true}','JavaScript'); //禁止使用showModelessDialog方式弹出的对话框 end;
方法2:(使用分析:部分网页吗,使用了定时器,每过一段时间刷新一下网页)
//原理:用其他页面先加载,然后跳转到主页面 procedure TForm1.FormCreate(Sender: TObject); begin WebBrowser2.Navigate('about:blank'); //最好在创建时候要先执行一次初始化,以免错误 ,可以将WebBrowser2先隐藏 end; procedure TForm1.WebBrowser1NewWindow2(ASender: TObject; var ppDisp: IDispatch; //响应主浏览器的OnNewWindow2事件 var Cancel: WordBool); begin ppDisp := WebBrowser2.Application; //将弹出的网页放到WebBrowser2中去加载 Cancel := False; //先不拦截弹窗 end; procedure TForm1.WbNoAdBeforeNavigate2(ASender: TObject; const pDisp: IDispatch; //响应WbNoAd的OnBeforeNavigate2事件 var URL, Flags, TargetFrameName, PostData, Headers: OleVariant; var Cancel: WordBool); begin if URL <> 'about:blank' then Cancel := True; //窗口弹到这里来拦截, end;
创建时间:2020.11.23 更新时间:
博客园 滔Roy https://www.cnblogs.com/guorongtao 希望内容对你有所帮助,谢谢!