如此获得带Frames的IE代码为什么错??(200分)

  • 主题发起人 主题发起人 刀锋战士
  • 开始时间 开始时间

刀锋战士

Unregistered / Unconfirmed
GUEST, unregistred user!
下面一段程序:
var
ShellWindow: IShellWindows;
nCount: integer;
spDisp: IDispatch;
i,j: integer;
vi,VJ,vm: OleVariant;
IE1: IWebBrowser2;
IDoc1: IHTMLDocument2;
HtmlFrame : IHTMLFramesCollection2;
HtmlWin : IHTMLWindow2;
sh:string;
begin
ShellWindow := CoShellWindows.Create;
nCount := ShellWindow.Count;

for i := 0 to nCount - 1 do
begin
vi := i;
spDisp := ShellWindow.Item(vi);
if spDisp = nil then continue;
spDisp.QueryInterface( iWebBrowser2, IE1 );
if IE1 <> nil then
begin
IE1.Document.QueryInterface(IHTMLDocument2,iDoc1);
if iDoc1 <> nil then
begin
HtmlFrame := idoc1.Get_frames;
for j:=0 to HtmlFrame.length-1 do
begin
Application.ProcessMessages;
vj:=j;
spDisp := HtmlFrame.item(vj);
if SUCCEEDED(spDisp.QueryInterface(IHTMLWindow2 ,HtmlWin))then
begin
begin
if (HtmlWin.name=form1.sfn.Text) or (form1.sfn.Text='ALL') then
begin
vm:=1;
if SUCCEEDED(HtmlWin.document.QueryInterface(IHTMLDocument2 ,IDoc1))then
begin
vj:=IDoc1.Get_all.item(0,0);
if cb.Checked then
begin
Memo2.Lines.Add('窗:'+HtmlWin.name);
Memo2.Lines.Add(vj.innerhtml); //这里是frame的网页代码啦
end;
sh:=vj.innerhtml;
Form1.hitsg(sh);
end;
end;

end;
end;
end;
Exit; //我只对第一个ie窗口使用,所以就退出
end;
end;
end;
end;

为什么对有的带框架的窗口有效,也就是说能读出其Frames窗代码,
而对一些特定的窗口,在运行到:
if (HtmlWin.name=form1.sfn.Text) or (form1.sfn.Text='ALL') then
一句时,程序就说HtmlWin.name拒绝访问,而在调试时HtmlWin.name的值却
能跟踪到,系统却不让读取其值?有没有什么好办法???
 
帮你提前,我也遇到类似问题
 
我也遇到这个问题,严重关注.具已有资料表示,如果Frames来源[DOMAIN]不同,会出现这种问题,但是还没有找到解决方法.
 
是不是因为加载进来还需要时间?好像如果你没有全部加载进来,就会出现引用错误的哦
 
感谢SandWater的回答,不过我确定不是这个原因.页面已经加载完成.举例说:http://stoneage.17173.com/这个链接但中,有3个Frames组成.其中index.htm(默认页)和main.htm来源于Domain:http://stoneage.17173.com/之下,可以取得,而Scroll1.htm源于http://www.17173.com/subject/roll/scroll1.htm之下,当读取时就会报错误消息OLEException,郁闷...[?]
 
我同意fion说的原因,但不知道怎么解决,只要一个页面里有来自不同的域的html就会这样。
 
我也遇到这样的问题,有人解决了吗?
 
我也遇到这样的问题,有人解决了吗?
 
后退
顶部