Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: ActiveX/СОМ/CORBA > IHTMLDocument2 получение всех ссылок


Автор: Matematik 6.5.2006, 15:26
Чтобы получить ссылки использую такой код
Код

unit uParseHTML;    
interface    
uses Classes, mshtml, ActiveX, Variants;    
procedure Init_parser;    
procedure Close_parser;    
procedure daj_all_link(var aBuff:AnsiString;aLinkList,aTextList:TStrings);    
implementation    
var    
  iDoc : IHTMLDocument2;    
procedure Init_parser;    
begin    
  idoc := CoHTMLDocument.Create as IHTMLDocument2;    
end;    
procedure Close_parser;    
begin    
  if assigned(iDoc) then    
  begin    
    iDoc.Close;    
    iDoc := nil;    
  end;    
end;    
procedure set_buff(var aBuff:AnsiString);    
var v : Variant;    
begin    
  v    := VarArrayCreate([0, 0], varVariant);    
  v[0] := aBuff;    
  idoc.clear;    
  idoc.write(PSafeArray(TVarData(v).VArray));    
end;    
procedure daj_all_link_2(var aLinkList,aTextList:TStrings);    
var    
  v : OleVariant;    
  j : Integer;    
  d : IDispatch;    
  e : IHTMLElement;    
  l : IHTMLAnchorElement;    
  c : IHTMLElementCollection;    
  z : string;    
  s : string;    
begin    
  aLinkList.Clear;    
  aTextList.Clear;    
  v := 'A';    
  d := iDoc.all.tags(v);    
  if assigned(d) then    
  begin    
    d.QueryInterface(IHTMLElementCollection, c);    
    if assigned(c) then    
    begin    
      for j:=1 to c.Get_length do    
      begin    
        d := c.item(pred(j),0);    
        d.QueryInterface(IHTMLElement, e);    
        d.QueryInterface(IHTMLAnchorElement, l);    
        if assigned(e) and assigned(l) then    
        begin    
          z := l.href;    
          if aLinkList.IndexOf(z)=-1 then    
          begin    
            aLinkList.Add(z);    
            aTextList.Add(e.innerText);    
          end    
        end    
      end    
    end    
  end    
end;    
procedure daj_all_link(var aBuff:AnsiString;aLinkList,aTextList:TStrings);    
begin    
  set_buff(aBuff);    
  daj_all_link_2(aLinkList,aTextList);    
end;    
end.


У ссылок с относительным путем получаю такую хрень
about:blank/path/name.htm

Как в IHTMLDocument2 прописать текуший URL, чтобы ссылки нормальные получались?
  

Автор: December 6.5.2006, 19:51
никак.
гарантирую.
только ручками.
единственный финт, который я не пробовал - это использовать тэг <BASE>, но есть тяжёлое подозрение, что не сработает. 

Автор: Matematik 7.5.2006, 23:13
Цитата(December @  6.5.2006,  20:51 Найти цитируемый пост)
использовать тэг <BASE>


БОЛЬШОЕ СПАСИБО
Работает.

Вот никак не мог вспомнить название этого тега. Однажды я с ним очень мучался, когда не мог понять почему в html коде ссылка относительная, а в IE ссылка нормальная.

 

Автор: December 8.5.2006, 03:12
ух ты smile
не ожидал smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)