URL einer Frame ermitteln
Moin ;)
Wie kann ich die URL einer Frame (welche in einem TWebBrowser angezeigt ist) ermitteln? Brauche ich für einen "Chatout" den ich dann bequem in einem anderen Browser anzeigen kann ;) Thx for Help! |
Re: URL einer Frame ermitteln
Probier mal das hier:
Delphi-Quellcode:
ShowMessage('URL: ' + WebBrowser_V11.OleObject.Document.Frames.item[0].Document.Url);
|
Re: URL einer Frame ermitteln
ne funzt net - endet mir error in mshtml.dll
*argh* das ist das einzigste was ich jetzt noch brauche um das Programm zu vollenden ^^ Hat jemand ne Ahnung wie es noch anders funzt? Thx im vorraus ;) |
Re: URL einer Frame ermitteln
Dazu gibt es was im SwissDelphiCenter:
...get all Frame URLs in TWebbrowser? Sieht allerdings ziemlich nach dem was alexander da gepostet hat und wenn jetzt schon 2 Quellen diese Lösung anbieten und sie bei dir nicht funktioniert, würde ich überlegen ob die Schwierigkeiten auf deiner Seite liegen könnten. :P |
Re: URL einer Frame ermitteln
Hmm jetzt bekomm ich jedesmal "Member nicht gefunden" was soll das heissen?
Delphi-Quellcode:
hmm den code aus dem Swiss werd ich gleich ma probieren - aber du hast recht, ist eigentlich identisch :roll:
showing.Navigate(Connecting.OleObject.Document.Frames.item('chat_out').document.url);
:twisted: |
Re: URL einer Frame ermitteln
Meins war allerdings nciht getestet...
|
Re: URL einer Frame ermitteln
Hmm, bekomme jetzt die URL *g* aber nur die der absoluten Hauptframe.
Und wenn ich andre frames wählen will "frame('bla')" oder auch "frame[1]" dann hautz mir dir mshtml.dll um die Ohren :/ :wall: Jemand ne Idee? :twisted: |
Re: URL einer Frame ermitteln
hast du mal mshtml oder MSHTML_TLB in uses eingefügt?
wenn member nicht gefunden wurde dann existiert der framen/name nicht:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i: Integer; begin Listbox1.Clear; begin for i := 0 to Webbrowser1.OleObject.Document.Frames.Length - 1 do begin Listbox1.Items.Add(Webbrowser1.OleObject.Document.Frames.item('HIER MUSS DEIN FRAMENAME REIN').Document.URL); end; end; end; end. |
Re: URL einer Frame ermitteln
Du kannst mal mit folgendem Code experimentieren.
Damit kannst du alle Frames im WB speichern. (oder auch einzelnd) ist auch von swissdelphicenter
Delphi-Quellcode:
uses
ActiveX, MSHTML_TLB, ComCtrls, ComObj; 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); 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; function GetFrameSource(WebDoc: iHTMLDocument2): string; //returns frame HTML and scripts as a text string var re: integer; HTMLel: iHTMLElement; HTMLcol: iHTMLElementCollection; HTMLlen: Integer; ScriptEL: IHTMLScriptElement; begin Result := ''; if Assigned(WebDoc) then begin HTMLcol := WebDoc.Get_all; HTMLlen := HTMLcol.Length; for re := 0 to HTMLlen - 1 do begin HTMLel := HTMLcol.Item(re, 0) as iHTMLElement; if HTMLEl.tagName = 'HTML' then Result := Result + HTMLEl.outerHTML; end; end; end; function WB_SaveFrameToFile(HTMLDocument: IHTMLDocument2; const FileName: TFileName): Boolean; // Save IHTMLDocument2 to a file var PersistFile: IPersistFile; begin PersistFile := HTMLDocument as IPersistFile; PersistFile.Save(StringToOleStr(FileName), System.True); end; function SaveWBFrames(WebBrowser1: TWebBrowser): string; // return the source for all frames in the browser var Webdoc, HTMLDoc: ihtmldocument2; framesCol: iHTMLFramesCollection2; FramesLen: integer; pickFrame: olevariant; p: integer; begin try WebDoc := WebBrowser1.Document as IHTMLDocument2; Result := GetFrameSource(WebDoc); // §§§ Hier kann Result in eine Datei gespeichert werden §§§§ oder mit // WB_SaveFrameToFile(WebDoc,'c:\MainPage.html'); //Handle multiple or single frames FramesCol := WebDoc.Get_frames; FramesLen := FramesCol.Get_length; if FramesLen > 0 then for p := 0 to FramesLen - 1 do begin pickframe := p; HTMLDoc := WebBrowser1.Document as iHTMLDocument2; WebDoc := GetBrowserForFrame(HTMLDoc, pickframe).document as iHTMLDocument2; if WebDoc <> nil then begin Result := GetFrameSource(WebDoc); // §§§ Hier kann Result in eine Datei gespeichert werden §§§§ oder mit // WB_SaveFrameToFile(WebDoc, 'c:\Frame' + IntToStr(p) + '.html'); // Wie bekommt man den Namen für ein Frame ?? // so? // ShowMessage(HTMLDoc.Get_parentWindow.Get_name); // ShowMessage(HTMLDoc.Get_parentWindow.Parent.Get_document.nameProp); end; end; except Result := 'No Source Available'; end; end; // Testen: procedure TForm1.Button1Click(Sender: TObject); begin SaveWBFrames(Webbrowser1); end; |
Re: URL einer Frame ermitteln
Ah danke ^^
Ich dachte schon cih müsse meinem Programm nen Grab schaufeln als ich von Brian Cryer dem Autor der Site "Crying about TWebBrowser programming" das hier gehört hab: "I know this problem well, but unfortunatly I don't know a way round it. I wish I did! Sorry! If you do find a way round it then I would love to hear. I have always assumed that its the security settings which are preventing it. all the best, Brian." :wall: *wieder Hoffnung schöpf* |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:11 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