WebBrowser zachowanie URLa po write()

0

Witam,
potrzebuje zrobić forme przegladarki która automaczynei zamienia w HTMLu tagi...
Zaczelem tak robic:

  1. wczytanie do webbrowsera storny
  2. wczytanie do zmiennej zawartosci
  3. zamiana tagow
  4. wpisanie w webbrosera zmienionej zawartosci

w kodzie wyglada to tak :

procedure TForm1.WebBrowserDocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
var
  IDoc    : IHTMLDocument2;
  Strl    : TStringList;
  strHTML,urlek : String;
  v       : Variant;
begin
  Strl := TStringList.Create;
  try
    urlek:=webbrowser.LocationURL;
    Strl.Text := webbrowser.OleObject.Document.documentElement.innerHTML;
    Idoc := WebBrowser.Document as IHTMLDocument2;
    Idoc.url:=urlek;
    IDoc.designMode:='on';
    v:=VarArrayCreate([0,0],VarVariant);
   // tu sobei cos zamieniam
    strHTML := StringReplace(Strl.Text, '<BR>', '<br>', [rfReplaceAll]);
    v[0]:= strHTML;
    IDoc.write(PSafeArray(System.TVarData(v).VArray));
    IDoc.designMode:='off';
  finally
    Strl.Free;
  end;
end;

Pokazuje mi wtedy tak jak chce strone ALE url głowny staje sie "blank" i wszystkei ścieżki na stronie są bledne

Klikam na linka ale jesli nie ma on w sobie pelnego adresu to sie psuje
np. "href='a.html'" WebBrowser zle odczyta bo nie ma adresu host...

Co powininem zrobić ? bo recznie zmaieniać w kodzie i dopisywać hosta jest rozwiazaniem troceh nie PRO

ALBO CZY JEST jakiś komponent w zamian za WebBrowsera ?

0

a nie możesz tak:

procedure TForm1.WebBrowserDocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
var
  IDoc    : IHTMLDocument2;
  Strl    : TStringList;
  strHTML,urlek : String;
begin
  Strl := TStringList.Create;
  try
    urlek:=webbrowser.LocationURL;
    Strl.Text := webbrowser.OleObject.Document.documentElement.innerHTML;
    Idoc := WebBrowser.Document as IHTMLDocument2;
    Idoc.url:=urlek;
   // tu sobei cos zamieniam
    strHTML := StringReplace(Strl.Text, '<BR>', '<br>', [rfReplaceAll]);
    webbrowser.OleObject.Document.documentElement.innerHTML = strHTML;
  finally
    Strl.Free;
  end;
end;

??

przy okazji nawet jeśli to "recznie zmaieniać w kodzie i dopisywać hosta" można zastąpić wpisaniem w dowolnym miejscu <base href="http://strona_bazowa">

0

pisze że nie mozna ustawić wartosci innerHTML

dało mi sie na razie cos takiego ze same body wrzuca :
OleVariant(WebBrowser.Document).Script.Document.Body.InnerHTML := strHTML;

ale jak odniesc sie do calosci ?
//szkoda że nie ma podgladu pripertis dla oleObject i variantów :D

0
shivanwk napisał(a)

//szkoda że nie ma podgladu pripertis dla oleObject i variantów :D

jak najbardziej jest (w tym przypadku), możesz skorzystać choćby ze skryptu piechnata http://piechnat.iglu.cz/download/Analiza%20obiektowa%20dokumentu%20[js].htm - uruchom pod IE bo inaczej cały sens się straci

1 użytkowników online, w tym zalogowanych: 0, gości: 1