Einzelnen Beitrag anzeigen

qicki

Registriert seit: 5. Jul 2004
22 Beiträge
 
Delphi 6 Personal
 
#1

javaScript add to webbrowser

  Alt 29. Sep 2005, 13:40
Hallo ich hab da ein problem mit zugriffsverletzungen in dem Code


Procedur zum hinzufügen von Javascript in den Browser
Delphi-Quellcode:
procedure AppendToWB(document: IHTMLDocument2);
var
  novoScript : IHTMLDOMNode;
  i: integer;
  ole_index: OleVariant;
  frame_dispatch: IDispatch;
  frame_win: IHTMLWindow2;
  frame_doc: IHTMLDocument2;
begin
  if Assigned(document) then
  begin

    novoScript := document.createElement('script') as IHTMLDOMNode;
    (novoScript as IHTMLScriptElement).text := 'function setTimeout(){};function window.focus(){};function focus(){};function window.alert(){};function alert(){}; function window.confirm(){};function confirm(){}; function window.prompt(){};function prompt(){};function window.open(){};';
    (document.body as IHTMLDOMNode).appendChild(novoScript);

    for i:=0 to (document.Frames.Length -1) do
    begin
      ole_index := i;
      frame_dispatch := document.Frames.Item(ole_index);
      if frame_dispatch <> nil then
      begin
        frame_win := frame_dispatch as IHTMLWindow2;
        frame_doc := frame_win.document;
        if Assigned(frame_doc) then
        begin
          novoScript := frame_doc.createElement('script') as IHTMLDOMNode;
          (novoScript as IHTMLScriptElement).text := 'function setTimeout(){};function window.focus(){};function focus(){};function window.alert(){};function alert(){}; function window.confirm(){};function confirm(){}; function window.prompt(){};function prompt(){};function window.open(){};';
          (frame_doc.body as IHTMLDOMNode).appendChild(novoScript);
        end;
      end;
    end;
  end;
end;
ondocomentcomplete Ereigniss
Delphi-Quellcode:
procedure TForm1.WBLoad(ASender: TObject; const pDisp: IDispatch;var URL: OleVariant);
var
  currentBrowser: IWebBrowser2;
  topBrowser: IWebBrowser2;
  document: IHTMLDocument2;
  windowName: string;
begin
  currentBrowser := pDisp as IWebBrowser2;
  topBrowser := (ASender as TWebBrowser).DefaultInterface;
  if currentBrowser = topBrowser then
  begin
    document := currentBrowser.Document as IHTMLDocument2;
    AppendToWB(document);
  end
end;
Also das ondocomentcomplete Ereigniss wird ja jedesmal aufgerufen wenn Seite/Frame geladen wurde und mit dem Verleich stellt man ja fest ob alle Frames der Seite geladen wurden. Wenn das geschieht soll er die procedur AppendToWB(document) aufrufen , was er auch tut. In der Prozedur soll er dann zu der Seite mit allen Frames die Javascriptelemente hinzufügen. Für die Hauptseite ist das niemals das problem , nur bei dem Frames erhalte ich bei frame_doc := frame_win.document; die Zugriffsverletzung . Ich weis nicht was ich falsche mache , hat jemand einen Tip ?
  Mit Zitat antworten Zitat