是我的问题?还是IE的问题?大家帮我看看。(100分)

  • 主题发起人 主题发起人 BeginDelphi
  • 开始时间 开始时间
B

BeginDelphi

Unregistered / Unconfirmed
GUEST, unregistred user!
看看下面的程序,我想列出网页中所有的“超级链接”。
procedre ListSuperLink;
var CurrDOM:IHTMLDocument2;
Element:IHTMLElement;
Anchor:IHTMLAnchorElement;
I:Integer;
begin
CurrDOM:=WebBrowser1.Docuent as IHTMLDocument2;
for I:=0 to CurrDOM.anchors.length-1 do
begin
anchor:=CurrDOM.anchors.item(emptyparam,I) as IHTMLanchorElement;
Element:=CurrDOM.anchors.item(emptyparam,I) as IHTMLElement;
Memo1.Lines.Add(format('%s-----%s',[Element.outterText,anchor.href]));
end;
end;

我的测试网页是
<html>
<body>
<a href="abcde">abcde</a>
<a href='defrag>defrag</a>
</body>
</html>

但运行后,列出来的东东是“空白”,没有内容。
我记得以前成功过,但上一次试时出来“AV”,重装系统后没有AV了,但没有内容。

我也用过OleVariant的方法,能列出OutterText,但没有href。?????
高手解释一下吧。
 
> anchor:=CurrDOM.anchors.item(emptyparam,I) as IHTMLanchorElement;
> Element:=CurrDOM.anchors.item(emptyparam,I) as IHTMLElement;

强制转换的方式肯定会有AV拉,应该这样,这是Microsoft的标准做法,
var
spDisp: IDispatch;
author: IHTMLanchorElement;
...
spDisp := CurrDOM.anchors.item(emptyparam,I)
if SUCCEEDED(spDisp.QueryInterface(IHTMLanchorElement, author))then
...
 
to DragonPC_???:
谢谢你的解答.这种方法我知道,我的方法没有错.
interface与class都可以用as 的,因为interface在DELPHI中可以看成是一个
"纯虚类",所以用AS没有错.当然,你的方法也是对的.

我发现了,这好像是IE的问题了.
我的HTML文件是:
<html>
<body>
<a href="abcde">abcde</a>
<a href='defrag>defrag</a>
</body>
</html>
时,CurrDoc.anchors.length竟然是0???????睁着眼睛说瞎话.
而我的HTML必须写在
<html>
<body>
<a id="Link1" href="abcde">abcde</a>
<a id="link2" href='defrag>defrag</a>
</body>
</html>
才能成功.我晕~~~~

对于上一种,我只能用currdoc.all来遍历了,有点慢,但可行.


不管怎么样,还是要谢谢你的参与.


 
后退
顶部