Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi WebBrowser/EmbeddedWB: Zugriff auf den Document eines Frames (https://www.delphipraxis.net/119584-webbrowser-embeddedwb-zugriff-auf-den-document-eines-frames.html)

resolution 28. Aug 2008 17:09


WebBrowser/EmbeddedWB: Zugriff auf den Document eines Frames
 
Hallo :)

sitze seit einigen Tagen vor dem Problem, dass ich Zugriff auf ein Frame aus einem Frameset benötige und zwar als IHTMLDocument2 ;)

Irgendwie bekomme ich das absolut nicht hin und mittlerweile hab ich völlig den Überblick verloren im IHTML Interface und den OleObjects *seufz*

Benutze zur Zeit den EmbeddedWB von Bsalsa und Delphi 2007..

Würde mir jemand helfen? :) Hab überall gesucht aber entweder mit den falschen Begriffen oder es findet sich wirklich nichts dazu..

Sourceschnippsel wie ich von einem Webbrowser.Document zu einem Frame as IHTMLDocument2 komme wäre prima, oder ein Link der das Thema behandelt auch :)

Danke und liebe Grüße!

marabu 28. Aug 2008 17:26

Re: WebBrowser/EmbeddedWB: Zugriff auf den Document eines Fr
 
Hallo,

die Suche nach Hier im Forum suchenGetFrameDoc sollte dir einige Code-Beispiele liefern, die sich für dein Problem anpassen lassen.

Grüße vom marabu

resolution 28. Aug 2008 17:51

Re: WebBrowser/EmbeddedWB: Zugriff auf den Document eines Fr
 
Danke marabu,

habe das Problem noch nicht lößen können:

hier bekomme ich eine AccessViolation..

Delphi-Quellcode:
function GetFrameDoc(doc: IHTMLDocument2; v: OleVariant): IHTMLDocument2;
var
  win: IHTMLWindow2;
  u: IUnknown;
  ec: IHTMLElementCollection;
begin
  u := doc.frames.item(v); // AccessViolation ! :(
  if Assigned(u)
  and Succeeded(u.QueryInterface(IHTMLWindow2, win))
    then Result := win.Document
    else Result := nil;
end;
.. genauso wie hier:

Delphi-Quellcode:
function GetBrowserForFrame(Doc: IHTMLDocument2; nFrame: Integer): IWebBrowser2;
  //Thanks to Rik Barker
  //returns an interface to the frame's browser
var
  pContainer: IOLEContainer;
  enumerator: ActiveX.IEnumUnknown;
  nFetched: PLongInt;
  unkFrame: IUnknown;
  hr: HRESULT;
begin
  Result := nil;
  nFetched := nil;
  // Cast the page as an OLE container
  pContainer := Doc as IOleContainer;
  // Get an enumerator for the frames on the page
  hr := pContainer.EnumObjects(OLECONTF_EMBEDDINGS or OLECONTF_OTHERS, enumerator); // AccessViolation ! :(
  if hr <> S_OK then
  begin
    pContainer._Release;
    Exit;
  end;
  // Now skip to the frame we're interested in
  enumerator.Skip(nFrame);
  // and get the frame as IUnknown
  enumerator.Next(1,unkFrame, nFetched);
  // Now QI the frame for a WebBrowser Interface - I'm not entirely
  // sure this is necessary, but COM never ceases to surprise me
  unkframe.QueryInterface(IID_IWebBrowser2, Result);
end;
Alle Seiten des Framesets liegen unter der gleichen Adresse, von da sollte die AV nicht kommen..
aber ich habe ja noch ein paar Seiten vor mir.. :)

marabu 28. Aug 2008 18:18

Re: WebBrowser/EmbeddedWB: Zugriff auf den Document eines Fr
 
Hast du mal den Wert von doc beim Eintritt in die Funktion GetFrameDoc überprüft?

Beachte auch, dass Frames beliebig verschachtelt sein können: ShowFrames()

resolution 28. Aug 2008 22:40

Re: WebBrowser/EmbeddedWB: Zugriff auf den Document eines Fr
 
Das Funktioniert jetzt prima, aber ich weiss nicht wieso die AV nichtmehr kommt..
So ein kurzer Quelltext und ich weiss nicht wirklich was er macht.. Unknown interface .. waaaaahhh *lach*
Aber verständlicher als die GetBrowserForFrame-func..

Folgendes Funktioniert:

Delphi-Quellcode:
function GetFrameDoc(doc: IHTMLDocument2;v: OleVariant): IHTMLDocument2;
var
  win: IHTMLWindow2;
  u: IUnknown;
begin
  u := doc.frames.item(v);
  if Assigned(u)
  and Succeeded(u.QueryInterface(IHTMLWindow2, win))
    then Result := win.Document
    else Result := nil;
end;
Dankeschön :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:22 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz