关于webbrowsers中jave提示框的自动关闭 (200分)

  • 主题发起人 主题发起人 txfzr
  • 开始时间 开始时间
T

txfzr

Unregistered / Unconfirmed
GUEST, unregistred user!
我在做一个软件时,是自动变换URL进行访问的,但是有些URL在访问过后就会弹出一个提示
框问你:网页正在关闭,是否确定?"这是因为该页含有jave脚本 window.close()的缘故,如果
我把IE安全设置里的活动脚本禁止是不会弹出来,但现在我想知道在把IE设置里不禁止活动脚
本的情况下,怎么样才能够不让这个提示框不弹出来,或者说自动杀掉这个提示框,当然
webbrowsers不能够因此而关闭.
 
截获wm_create消息
在你的窗体上加一个ApplicationEvents,
然后在它的OnMessage事件中加入如下代码:
if (Msg.message = WM_OPEN) then
begin
PeekMessage(Msg, Msg.Hwnd, 0, 0, PM_REMOVE);
Handled := True; //该消息已处理,不再需要后续处理
end;
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1469912
 
是不让由jave脚本产生的询问确定取消的提示框弹出来也不对其进行处理啊,还有更好的方法吗?
 
只要在HTML 中用 window.open 方式打开,这样的窗口用 window.close 关闭是不会出现
弹出窗口的。
 
倒,实在不明白你在说什么?我怎么知道人家的网页文件呀,我所能控制的只是客户端和webbrowser控件而已
 
WM_OPEN,有这么个参数吗,我好像没找到呀???
 
在它的OnMessage事件中加入如下代码:
if (Msg.message = WM_OPEN) then
begin
PeekMessage(Msg, Msg.Hwnd, 0, 0, PM_REMOVE);
Handled := True; //不再需要处理
end;
 
WM_OPEN根本不存在呀???????
 
抓紧时间啊,今天晚上之前如果回答通过的话,我会再开个贴子再送300分,一共五百分
 
大哥,有答案时,给我也发一份吧
行么??先谢谢了

peixiaokai@163.com
 
简单, 截获接口IDOCHOSTSHOWUI即可搞定你的问题
当然也可以用现成的,EmbeddedWB的OnShowMessage事件。
 
procedure TForm1.Button1Click(Sender: TObject);
begin
EmbeddedWB1.Navigate('C:/Test.htm');
end;

function TForm1.EmbeddedWB1ShowMessage(hwnd: Cardinal; lpstrText,
lpstrCaption: PWideChar; dwType: Integer; lpstrHelpFile: PWideChar;
dwHelpContext: Integer; var plResult: Integer): HRESULT;
begin
Caption := lpstrText;
//根据lpstrCaption及lpstrText来判断是否需要显示对话框
//如果不要显示对话框,如关闭确认对话框,则返回S_OK即可:
Result := S_OK;
end;
 
希望能有源代码,并且用基本的webbrowser控件实现,比如采用IDOCHOSTSHOWUI接口的方法来解决,希望大家能够讲详细点好吗,如果愿意直接发源代码给我那最好了
 
以下已测试通过!!!!

2. 页面退出时弹出关闭对话框的问题
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1473879
其实这一问题很简单,只要熟悉DHTML的对象模型就可以做到。
一般退出时弹出关闭对话框的页面都设置了 onunload 属性,这一属性可以在<body>标记中指定,通过脚本可以对window.onunload 赋值。在onunload 的脚本中如果包含了window.close(),就会在关闭页面时弹出对话框。以下页面就是一个例子:

D:/tt.htm

<HTML>
<HEAD>
</HEAD>
<BODY onunload='JavaScript:window.close()'>
这是一个文档
</BODY>
</HTML>
要想不弹出对话框,只要重置 window.onunload 属性就可以了,对于 TwebBrowser 重置这一属性(或事件)的最好时机就是OnDocumentComplete事件。
在Form 中放一 TwebBrowser ,并在OnDocumentComplete事件中进行如下处理就可达到预期的效果。

procedure TForm1.FormCreate(Sender: TObject);
begin
webbrowser1.Navigate('D:/tt.htm');
end;

procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
var
win:ihtmlwindow2;
doc:ihtmldocument2;
begin
try
doc:=ihtmldocument2(webbrowser1.document);
win:=ihtmlwindow2(doc.Get_parentWindow );
win.onunload:='';
except
end;
end;
对于一些通过脚本动态设置的页网,仅仅在OnDocumentComplete 中处理可能还不够,这时我们可以使用其它对策,比如将上述过程放在定时器中。
 
EmbeddedWB本身就是开放源码的东西
http://www.euromind.com/iedelphi/embeddedwb.htm
他做的也只是在TWebBrowser的基础上实现了几个额外的接口,你看一下它的源码就明白了。

至于说用 window.onunload ,如果它不是在 window.onunload 里写有你怎么办? 比如写
在定时器事件里的,页面完成后15秒自动关闭。
 
上述情况我已经提到了!!!
 
我将jsxjd的代码放在timer里试了,每隔一秒就执行一次,可还是会弹出提示框呀
昨天我试着在timer中用如下代码来捕捉提示框并发消息来关闭他,窗口是抓到了,测试代
码显示,过程已被激活,窗口标题发生了变化,但是发的消息却关不了提示框,各位高人
可知道这是什么原因呀?
hwnd:=FindWindow('#32770','Microsoft Internet Explorer');
if hwnd<>0 then
begin
FORM1.Caption:='TEST';
SendMessage(hwnd,WM_Close,0,0);
end;
 
后退
顶部