mit dem Browsercontrol den Inhalt eines Frames auslesen

19/09/2008 - 17:35 von Lutz Langhans | Report spam
Hallo zusammen,

ich habe folgendes Problem.

Och möchte mit dem Browsercontrol eine Webseite laden, die ein Frame
enthàlt. Wenn die Seite geladen ist, dann möchte ich den Inahlt des
Frames auslesen. Das ganze sieht folgender Maßen aus.

Index.html

*************************************

<html>
<head>
<title>Lutzis Supertest</title>


</head>

<frameset rows="*,0,0" frameborder="no" border="0" framespacing="0">
<frame name="mainframe" src="home.htm" frameborder="0"
scrolling="auto" noresize>
</frameset>
</html>

**************************************

home.htm

**************************************

<html>

<head>
<title>Bitte anmelden</title>
<meta name="generator" content="Namo WebEditor">
<script language="JavaScript">
if (parent.frames.length == 0) {
window.location = "/";
}
</script>
</head>

<body bgcolor="white" text="black" link="blue" vlink="purple"
alink="red">
<p>Bitte anmelden</p>
<p>&nbsp;</p>
<form name="form1">
<p>Benutzername: <input type="text" name="Benutzername">
Passwort:&nbsp;<input type="password" name="Passwort"></p>
<p><input type="submit" name="Anmelden"></p>
</form>
<p>&nbsp;</p>
</body>

</html>

***********************************
jetzt wàhre es ja ganze einfach mit

HtmlWindow currentWindow = webBrowser1.Document.Window;

foreach (HtmlWindow frame in currentWindow.Frames)
{
webBrowser1.Navigate(frame.Url.ToString());
}

den Inhalt der Frames einfach in den Browser zu laden. Damit gerades
das nicht passiert, wurde der folgende Code in die Seite eingefügt.

if (parent.frames.length == 0) {
window.location = "/";
}

Der wiederum sorgt dafür, dass die Seite einfach neu aufgerufen wird.

Was tun?

Gruß

Lutz
 

Lesen sie die antworten

#1 Frank Dzaebel
19/09/2008 - 20:06 | Warnen spam
Hallo Lutz,

Ich möchte mit dem Browsercontrol eine Webseite laden, die ein Frame
enthàlt. Wenn die Seite geladen ist, dann möchte ich den Inahlt des
Frames auslesen.
Jetzt wàre es ja einfach ...
den Inhalt der Frames einfach in den Browser zu laden. Damit gerades
das nicht passiert, wurde der folgende Code in die Seite eingefügt.



Also Du brauchst da kein zusàtzliches Javascript
in Deine Seiten einzufügen, damit Du Frames
auslesen kannst.

Zunàchst eine Info:

- Damit Du eine Seite auslesen kannst, solltest
Du (sowieso) das DocumentCompleted Ereignis
des WebBrowsers abwarten/behandeln.

- Pro DocumentCompleted wird normal ein
Frame geladen, wenn die Seite ein Frame enthàlt.

[DocumentComplete Event (InternetExplorer, WebBrowser)]
http://msdn.microsoft.com/en-us/lib...68329.aspx

(steht leider nicht so direkt in der Framework-Doku,
aber da das ein Wrapper ist, ist obiger Link anwendbar)
______________________________

Einerseits ginge zunàchst auch soetwas:

private void Form1_Load(object sender, EventArgs e)
{
string indexPath = Path.Combine(Application.
StartupPath, "Index.htm");
webBrowser1.Navigate(indexPath);
}

StringCollection framePaths = new StringCollection();

private void button1_Click(object sender, EventArgs e)
{
HtmlWindow currentWindow = webBrowser1.Document.Window;
if (framePaths.Count == 0)
foreach (HtmlWindow frame in currentWindow.Frames)
framePaths.Add(frame.Url.LocalPath);
foreach (string path in framePaths)
{
webBrowser1.Navigate(path);
MessageBox.Show("Frame: " + Path.GetFileName(path));
}
}


//=
Oder eben ggf. einfach als pures HTML:

private void button1_Click(object sender, EventArgs e)
{
HtmlWindow currentWindow = webBrowser1.Document.Window;
foreach (HtmlWindow frame in currentWindow.Frames)
{
WebRequest req = System.Net.WebRequest.Create(frame.Url);
Stream stream = req.GetResponse().GetResponseStream();
string htmlFrame = new StreamReader(stream).ReadToEnd();
Debugger.Break(); stream.Close();
}
}


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen