Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi URL einer Frame ermitteln (https://www.delphipraxis.net/10125-url-einer-frame-ermitteln.html)

KyroxX 12. Okt 2003 00:38


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!

Alexander 12. Okt 2003 07:08

Re: URL einer Frame ermitteln
 
Probier mal das hier:
Delphi-Quellcode:
ShowMessage('URL: ' + WebBrowser_V11.OleObject.Document.Frames.item[0].Document.Url);

KyroxX 13. Okt 2003 17:46

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 ;)

nTE 13. Okt 2003 18:00

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

KyroxX 13. Okt 2003 18:00

Re: URL einer Frame ermitteln
 
Hmm jetzt bekomm ich jedesmal "Member nicht gefunden" was soll das heissen?

Delphi-Quellcode:
showing.Navigate(Connecting.OleObject.Document.Frames.item('chat_out').document.url);
hmm den code aus dem Swiss werd ich gleich ma probieren - aber du hast recht, ist eigentlich identisch :roll:

:twisted:

Alexander 13. Okt 2003 18:43

Re: URL einer Frame ermitteln
 
Meins war allerdings nciht getestet...

KyroxX 14. Okt 2003 05:34

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:

horst 17. Okt 2003 22:57

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.

horst 17. Okt 2003 23:20

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;

KyroxX 18. Okt 2003 13:23

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.
Seite 1 von 2  1 2      

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