谁知道如何防止TWebbrowser弹出网页对话框(200分)

  • 主题发起人 主题发起人 wanderld
  • 开始时间 开始时间
W

wanderld

Unregistered / Unconfirmed
GUEST, unregistred user!
在网页中使用showmodeldialog这个函数,总是弹出一个网页对话框,现有的屏蔽弹窗的软件都无法屏蔽,谁知道怎么自动关闭它
 
使用 EmbeddedWB 控件吧,减少很多功夫
使用 EnableModeless 事件
 
EnableModeless 事件 在哪里
另外我还想屏蔽alert
window.focus等脚本
有没有办法做到
我在想是不是可以在网页下载完毕后
利用IHTMLELEMENT的script的属性将含有以上脚本的内容修改
但是不知道在什么事件中添加
因为总是还没有等我修改这些脚本
这些脚本就已经执行了
 
屏蔽alert
onShowMessage事件
Result := S_OK;
屏蔽网页对话框
onShowDialog事件
SendMessage(h, WM_CLOSE, 0, 0);

http://www.2ccc.com/article.asp?articleid=3339
 
楼上的,我用onShowDialog事件
SendMessage(h, WM_CLOSE, 0, 0);
结果我的程序就退出了
 
另外我还说明一点
是window.SHOWMODELDIALOG产生的对话框
有没有办法取消window.focus这个脚本
 
SendMessage(h, WM_CLOSE, 0, 0);
什么时候退出了,启动?对话框弹出?
window.SHOWMODELDIALOG产生的对话框,基本上无法控制,只有在弹出时把它关闭
按理onShowDialog事件
SendMessage(h, WM_CLOSE, 0, 0);
应关闭所有程序主窗体弹出对话框
 
我查了一下
onshowdialog中的h参数是WM_activate消息的wnd参数
想当初我曾经在主form上拦截WM_ACTIVATE消息,然后判断如果wnd的窗口不是主form,就关闭它(用标题判断)。但是这仅仅可以在主form是焦点窗口的时候才可以。如果主form不是焦点窗口,就不会执行sendmessage函数
我想onshowdialog的原理是一样的
只是不清楚WM_ACTIVATE究竟会把什么句柄放在wnd里面
按照楼上所说,onShowDialog事件
SendMessage(h, WM_CLOSE, 0, 0);
我把程序最小化
这个代码就不执行
如果有窗口弹出以后,我把程序最大化
程序马上退出
 
OnShowDialog的确是拦截主form的WM_ACTIVATE消息,
主form不是焦点窗口确实不会触发WM_ACTIVATE消息
看过GreenBrowser的源码,他也是这样做.
IE6sp2开始有个新事件OnNewWindow3据说有用
 
procedure TPageControlEx.OnNewWindow2(Sender: TObject; var ppDisp: IDispatch; var Cancel: WordBool);
begin
Cancel := false;
ppDisp := NewWebPage('新建页', '').DefaultDispatch;
end;

{
 
在网页中使用showmodeldialog这个函数,总是弹出一个网页对话框,现有的屏蔽弹窗的软件都无法屏蔽,谁知道怎么自动关闭它

只能在弹出后,再判断关掉
 
就是啊,弹出后马上关掉,用TIMER控件监视,时间放短一点。
 
楼上的,问题是我怎么判断是不是有showmodeldialog弹出窗口呢
 
http://www.delphibbs.com/delphibbs/DispQ.asp?LID=1411869
我在这里回答了一个贴子,楼主可以参考一下
 
楼上的,多谢你的关注
但是,要判断弹出的窗口是否是本程序弹出,不知道怎么办。最好不用findwindow之类的,这样可能会导致关闭其他程序弹出的窗口。并且,我预先也不知道弹出的窗口是什么标题
 
以下方法好使
procedure WMActivate(var Msg: TWMActivate);message WM_Activate;


procedure TFormMain.WMActivate(var Msg: TWMActivate);
var
S: String;
wnd: HWND;
I: Integer;
begin
If Msg.Active=0 then
begin
wnd := Msg.ActiveWindow;
I := GetWindowTextLength(wnd);
SetLength(S, I + 1);
GetWindowText(Wnd, PChar(S), I + 1);
if Pos('Internet Explorer', S)>0 then
begin
// Sendmessage(wnd,WM_CLOSE,0,0);
Sendmessage(wnd,WM_KEYDOWN,VK_RETURN,0);
// showMessage('检测到弹出窗口!');
end;
end;
end;
 
谢谢楼上的,不过这个函数会把主窗口关闭,我也不知道为什么
 
Pos('Internet Explorer', S)>0 把'Internet Explorer'换成你弹出窗体包含的内容呀
 
to lcyandzj, 要判断弹出的窗口是否是本程序弹出,不知道怎么办。最好不用findwindow之类的,这样可能会导致关闭其他程序弹出的窗口。并且,我预先也不知道弹出的窗口是什么标题
 
后退
顶部