![]() |
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! |
Re: WebBrowser/EmbeddedWB: Zugriff auf den Document eines Fr
Hallo,
die Suche nach ![]() Grüße vom marabu |
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:
.. genauso wie hier:
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;
Delphi-Quellcode:
Alle Seiten des Framesets liegen unter der gleichen Adresse, von da sollte die AV nicht kommen..
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; aber ich habe ja noch ein paar Seiten vor mir.. :) |
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: ![]() |
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:
Dankeschön :)
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz