用WebBrowser 打开含有框架的网页,如何判断打开完毕?谢谢(内空)(100分)

  • 主题发起人 主题发起人 mycoolis
  • 开始时间 开始时间
M

mycoolis

Unregistered / Unconfirmed
GUEST, unregistred user!
应该说 如何得知何时打开完毕
 
发现:如果有框架,则先触发框架内网页的documentcomplete事件,最后才是最外层窗口的documentcomplete事件
所以我们只要检测
WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);

中的 URL是否等于 我们navigate的 url 就可以了 :)[8D]
不过 URL 的格式比较宽松 比如 navigator('www.com') 也可以,但是在documentComplete事件中的URL 被自动转换成了 'http://www.com/'
所以两者不相等。。

发了个贴子 URL格式问题:怎么把“非正式”的URL转换成正式的格式? http://www.delphibbs.com/delphibbs/dispq.asp?lid=1488418
请知道的回答,谢谢~
 
基本通用mycoolis的看法,在DocumentComplete事件里检查,只不过要检查的不是URL,而是
pDisp,当pDisp和webbrowser.Document相同时,所有Frame都已经完成了。
 
是呀,刚发贴没多久就意识到了 我现在就在用 真的 :
WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
var doc : IHTMLDocument2 ;
begin
doc := (pdisp as IWebBrowser2).Document as IHTMLDocument2 ;
if doc = (FWeb1.Document as IHTMLDocument2 ) then
begin
debug('DocumentComplete : ' + url);
debug(Doc.body.innerHTML);
end;
end;
(希望写的没错)
不过说真的还是很感谢的说 [:)]
 
对 IDispatch 不甚了解,没想到用起来还是蛮简单的啦
 
简单一点的:
WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
var doc : IHTMLDocument2 ;
begin
if (pdisp as IWebBrowser2).Document = Fweb1.Document then
begin
。。。
end;
end;
 
后退
顶部