Webbrowser(Otwieranie długiego kodu javascript)

0

Witam
Zacząłem pisać własną przeglądarkę internetową w programie Delphi wykorzystując do tego komponent WebBrowser.
Wszystko działa bardzo dobrze,lecz mam pewien problem.
Chciałbym za pomocą tej przeglądarki, otworzyć bardzo długi kod javascript.
Niestety zawiera on grubo ponad 255 znaków,i komponent nie chce go już otworzyć
Próbowałem już konwersji z string do pchar ale bezskutecznie.
Mógłby ktoś spojrzeć na ten kod i zobaczyć gdzie mam błąd?

procedure TForm1.SpeedButton7Click(Sender: TObject);
var
wiersz:pchar;
begin
wiersz:= PAnsiChar(edit2.Text);
WebBrowser1.Navigate(wiersz);
end; 
0

Nie rozumiem chcesz metodą Navigate wykonać kod JavaScript? Jeżeli tak to nie robi się tego poprzez Navigate tylko np. jak w przykładzie: http://delphi.about.com/od/adptips2006/qt/wb_execscript.htm

0

Dzięki za podpowiedź:)
Trochę samemu pogrzebałem i odnalazłem takie coś:

 uses
  mshtml, ActiveX, ComObj;

procedure TForm1.Button1Click(Sender: TObject);
var
  IDoc: IHTMLDocument2;
  Strl: TStringList;
  sHTMLFile: string;
  v: Variant;
  Links: IHTMLElementCollection;
  i: Integer;
  Link: IHTMLAnchorElement;
begin
  if OpenDialog1.Execute then
  begin
    sHTMLFile := OpenDialog1.FileName;
    Strl := TStringList.Create;
    try
      Strl.LoadFromFile(sHTMLFile);
      Idoc := CreateComObject(Class_HTMLDOcument) as IHTMLDocument2;
      try
        IDoc.designMode := 'on';
        while IDoc.readyState <> 'complete' do
          Application.ProcessMessages;
        v := VarArrayCreate([0, 0], VarVariant);
        v[0] := Strl.Text;
        IDoc.Write(PSafeArray(System.TVarData(v).VArray));
        IDoc.designMode := 'off';
        while IDoc.readyState <> 'complete' do
          Application.ProcessMessages;
        Memo1.Lines.Text := IDoc.body.innerText;
      finally
        IDoc := nil;
      end;
    finally
      Strl.Free;
    end;
  end;
end;

W lini:

uses
  mshtml, ActiveX, ComObj; 

wyskakuje mi błąd o braku danego mshtml.dcu, skąd mogę to pobrać?

0

Jeżeli dobrze pamiętam to w Delphi 7 Personal (i może innych darmowych też) nie było komponentu WebBrowser i trzeba było go instalować samodzielnie poprzez Import AciveX Control ale wtedy chyba zamiast mshtml był tworzony plik mshtml_tlb więc spróbuj w uses zamiast mshtml wpisać mshtml_tlb

0

Ok wszystko zadziałało zrobiłem to według twojego kodu:

 procedure ExecuteScript(doc: IHTMLDocument2; script: string; language: string) ;
 begin
    if doc <> nil then
    begin
      if doc.parentWindow <> nil then
        doc.parentWindow.ExecScript(script, Olevariant(language)) ;
    end;
 end;

Podczas gdy podaję mały kod js, wszystko działa,gdy natomiast większy w lini:

doc.parentWindow.ExecScript(script, Olevariant(language)) ; 

wyskakuje błąd.I znowu jestem w punkcie wyjścia:(

aha
Tu drugi kod podający te dane:

  procedure TForm1.SpeedButton7Click(Sender: TObject);
var
    script : pchar;
 begin


    script := PAnsiChar(Memo2.Lines.Text);

    ExecuteScript(WebBrowser1.Document as IHTMLDocument2, script, 'javascript')
 end;

end.
0
ciastek234 napisał(a)

wyskakuje błąd.I znowu jestem w punkcie wyjścia:(
Ale jaki błąd, może błąd jest w kodzie JS?

0

Możliwe że to wina tego że silnik ie7 nie chce otworzyć tego kodu.
Gdy wkleję ten kod do przeglądarki firefox wszystko działa.

0

Spróbuj użyć silnika Google Chrome. Jego implementacja w Delphi nie tak dawno pojawiła się.

0

Program piszę dla siebie...być może później roześlę go znajomym:)

Do przeglądarki ie doinstalowałem dodatek trixie..który uruchamia automatycznie kody js na stronie przeze mnie podanej.

Czy jest jakaś możliwość dodania zakładki "Narzędzia" z ie, do mojego programu? Wtedy mógłbym z rozwiniętej listy wybrać ten dodatek, i problem został by rozwiązany:)

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