AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi URL einer Frame ermitteln
Thema durchsuchen
Ansicht
Themen-Optionen

URL einer Frame ermitteln

Ein Thema von KyroxX · begonnen am 12. Okt 2003 · letzter Beitrag vom 18. Okt 2003
Antwort Antwort
Seite 1 von 2  1 2      
KyroxX

Registriert seit: 25. Aug 2003
Ort: Internet
52 Beiträge
 
#1

URL einer Frame ermitteln

  Alt 12. Okt 2003, 00:38
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!
Gr33z,
KyroxX
  Mit Zitat antworten Zitat
Alexander

Registriert seit: 28. Aug 2002
Ort: Oldenburg
3.513 Beiträge
 
Turbo Delphi für .NET
 
#2

Re: URL einer Frame ermitteln

  Alt 12. Okt 2003, 07:08
Probier mal das hier:
ShowMessage('URL: ' + WebBrowser_V11.OleObject.Document.Frames.item[0].Document.Url);
Alexander
  Mit Zitat antworten Zitat
KyroxX

Registriert seit: 25. Aug 2003
Ort: Internet
52 Beiträge
 
#3

Re: URL einer Frame ermitteln

  Alt 13. Okt 2003, 17:46
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
Gr33z,
KyroxX
  Mit Zitat antworten Zitat
Benutzerbild von nTE
nTE

Registriert seit: 8. Sep 2003
60 Beiträge
 
#4

Re: URL einer Frame ermitteln

  Alt 13. Okt 2003, 18:00
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
  Mit Zitat antworten Zitat
KyroxX

Registriert seit: 25. Aug 2003
Ort: Internet
52 Beiträge
 
#5

Re: URL einer Frame ermitteln

  Alt 13. Okt 2003, 18:00
Hmm jetzt bekomm ich jedesmal "Member nicht gefunden" was soll das heissen?

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

Gr33z,
KyroxX
  Mit Zitat antworten Zitat
Alexander

Registriert seit: 28. Aug 2002
Ort: Oldenburg
3.513 Beiträge
 
Turbo Delphi für .NET
 
#6

Re: URL einer Frame ermitteln

  Alt 13. Okt 2003, 18:43
Meins war allerdings nciht getestet...
Alexander
  Mit Zitat antworten Zitat
KyroxX

Registriert seit: 25. Aug 2003
Ort: Internet
52 Beiträge
 
#7

Re: URL einer Frame ermitteln

  Alt 14. Okt 2003, 05:34
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 :/

Jemand ne Idee?

Gr33z,
KyroxX
  Mit Zitat antworten Zitat
horst

Registriert seit: 1. Jul 2003
347 Beiträge
 
Delphi 2007 Professional
 
#8

Re: URL einer Frame ermitteln

  Alt 17. Okt 2003, 22:57
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.
  Mit Zitat antworten Zitat
horst

Registriert seit: 1. Jul 2003
347 Beiträge
 
Delphi 2007 Professional
 
#9

Re: URL einer Frame ermitteln

  Alt 17. Okt 2003, 23:20
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 = 'HTMLthen
        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;
  Mit Zitat antworten Zitat
KyroxX

Registriert seit: 25. Aug 2003
Ort: Internet
52 Beiträge
 
#10

Re: URL einer Frame ermitteln

  Alt 18. Okt 2003, 13:23
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."

*wieder Hoffnung schöpf*
Gr33z,
KyroxX
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:15 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