如何判断webbrowser框架内容全部加载完毕?

HackerMo0 2010-05-29 01:10:03
我想等博客的fckeditor加载完毕后自动填写内容,现在填写内容已经搞定了,但是判断页面加载完毕不准确,所以调试时会出错,说找不到成员

博客地址
http://www.blogtoowoomba.com/

测试ID:onmyway
测试密码:cMKpYJJx

我查到的方法是
procedure TForm1.WebBrowser1DocumentComplete(ASender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
begin
if WebBrowser1.Application = pDisp then
begin
Text := '网页下载完毕!';
end;
end;


但是不行
...全文
1310 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
devhp 2010-05-30
  • 打赏
  • 举报
回复
這個要操作的網頁是包含了三层框架,上面大大的代码仅仅判断到第二层上.而你要操作的刚好是第三层上的东西,

由于第三层并沒有SRC,所以也不會產生 DocumentComplete所以上面大大的方法根本就判斷不到第三層.所以我们变通一下.第三層會產生一個BeforeNavigate2,在這里用全局變更urls取得url,然後在DownloadComplete事件中判斷這個urls是不是:javascript:void(0)就可以了

  urls:string;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
WebBrowser1.Navigate('http://www.blogtoowoomba.com/login.php');
end;

procedure TForm1.WebBrowser1DownloadComplete(Sender: TObject);
begin
if urls='javascript:void(0)' then
填表; //為了以后再填,應該清空urls;

end;

procedure TForm1.WebBrowser1BeforeNavigate2(Sender: TObject;
const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
begin
if url='javascript:void(0)' then urls:=url;
end;


HackerMo0 2010-05-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 tiankun66 的回复:]

注意

1、打开http://www.blogtoowoomba.com/ 完成后会提示 一次完成


2、 Login 页面加载完成也会提示一次完成

3、 登录后 页面加载完成也会有一次提示完成
[/Quote]

多谢,不过我说的是发布文章页面的加载,是其中带了fckeditor编辑器的,地址是
http://www.blogtoowoomba.com/manager/add_entry.php
用我给的id和密码登陆
hongss 2010-05-29
  • 打赏
  • 举报
回复

while WebBrowser1.ReadyState < READYSTATE_COMPLETE do
Application.ProcessMessages;
大肚肥肥 2010-05-29
  • 打赏
  • 举报
回复
注意

1、打开http://www.blogtoowoomba.com/ 完成后会提示 一次完成


2、 Login 页面加载完成也会提示一次完成

3、 登录后 页面加载完成也会有一次提示完成
大肚肥肥 2010-05-29
  • 打赏
  • 举报
回复
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OleCtrls, SHDocVw;

type
TForm1 = class(TForm)
WebBrowser1: TWebBrowser;
procedure WebBrowser1NavigateComplete2(ASender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
procedure WebBrowser1DocumentComplete(ASender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
glpDisp: IDispatch;
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
WebBrowser1.Navigate('http://www.blogtoowoomba.com/');
end;

procedure TForm1.WebBrowser1DocumentComplete(ASender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
begin
begin
if (glpDisp <> nil) and (glpDisp = pDisp) then
begin
glpDisp := nil;
ShowMessage('完成');

end;
end;
end;

procedure TForm1.WebBrowser1NavigateComplete2(ASender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
begin
if glpDisp = nil then glpDisp := pDisp;
end;

end.
HackerMo0 2010-05-29
  • 打赏
  • 举报
回复
测试过,不行啊。。。
大肚肥肥 2010-05-29
  • 打赏
  • 举报
回复
1 定义一个全局变量 glpDisp: IDispatch;


2、NavigateComplete2 事件 写如下代码
procedure TForm1.WebBrowser1NavigateComplete2(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
begin
if glpDisp = nil then glpDisp := pDisp;
end;

3、DocumentComplete 事件写如下代码
procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
begin
if (glpDisp <> nil) and (glpDisp = pDisp) then
begin
glpDisp := nil;
ShowMessage('完成');

end;
end;

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧