Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs
ASP German Homepage Homepage
 

Liste

.NET 2.0 (1)
.NET Allgemein (16)
.NET Fu (5)
ADO.NET (11)
Aprilscherz (3)
ASP Grundlagen (44)
ASP Tricks (83)
ASP.NET (44)
ASPIntranet.de (5)
C# (28)
Datenbank (44)
Dokumentation (4)
IIS 6.0 (1)
Komponenten (29)
Optimierung (10)
Server (21)
Sicherheit (34)
Tee Off (6)
VB.NET (6)
WAP (8)
Web Services (11)
XML (9)

RSS 2.0 - Die neuesten fünf Artikel auf AspHeute.com


 

Suchen





 

English Articles
Chinese Articles
Unsere Autoren
 
Link zu AspHeute
Impressum
Werben
Anfragen

Redirects mit Frame-Targets

Geschrieben von: Christoph Wille
Kategorie: ASP Grundlagen

Eine der häufigeren Fragen in den ASP Listen ist ob und wie man dem Befehl Response.Redirect ein Frame Target angeben kann. Die Antwort darauf ist nein, denn Frames sind ein clientseitiges Konzept, von dem ASP nichts weiß. Aber - was hindert uns, dem Client clientseitigen Code zu schicken, die gewünschte Seite in einem anderen Frame zu laden?

Nichts. Alles was wir dazu brauchen, ist ein bischen JavaScript - nichts außergewöhnliches, nur ein einfacher Redirect per JavaScript. Um das ganze nicht in der Luft hängen zu lassen, habe ich ein einfaches Frameset gebastelt, das primär aus rein statischen HTML Seiten besteht. Das Framsetdokument framset.htm sieht wie folgt aus:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
	<title>Simple Frameset</title>
</head>

<!-- frames -->
<frameset  cols="200,*">
    <frame name="frmLeft" src="Left.htm" marginwidth="10" marginheight="10" 
        scrolling="auto" frameborder="1">
    <frame name="frmRight" src="Right.htm" marginwidth="10" marginheight="10" 
        scrolling="auto" frameborder="1">
</frameset>

<body>

Browser doesn't support frames.

</body>
</html>

Keine Tricks bis dato. Ebensowenige finden sich in Right.htm, das eigentlich nur eine leere HTML Datei ist (deshalb auch hier kein Listing). Interessant ist für unser Vorhaben eigentlich nur left.htm, das unser Script RedirectSample.asp aufruft:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
	<title>Left</title>
</head>

<body>

<a href="RedirectSample.asp">Test Redirect</a>

</body>
</html>

Was passiert also in RedirectSample.asp? Wir müssen ein JavaScript zurückschicken, das den Client auf die passende Seite im passenden Frame redirected. All diese gewünschte Funktionalität ist in der Funktion TargetedRedirect verpackt, die in unserer RedirectSample.asp wie folgt aufgerufen wird:

<%
TargetedRedirect "http://www.aspheute.com/", "frmRight", True
%>
<!--#include file="Left.htm"-->

Damit bekommen wir folgendes Ergebnis:

Bevor ich das Geheimnis um die Implementierung von TargetedRedirect lüfte, muß ich noch die Frage um das Warum? für die #include Anweisung beantworten: unser serverseitiger Code rendert ein clientseitiges JavaScript, das ein bestimmtes Dokument in einem anderen Frame lädt. Nur - um unseren serverseitigen Code anzustoßen, wird der linke Frame neu geladen, und das bedeutet, er wäre leer, wenn wir nur den Redirect-Code schicken würden. Deshalb schicke ich left.htm ganz einfach noch einmal, der Redirect-Code ist vor dem Inhalt von left.htm "angehängt":

<script language="JavaScript">
parent.frmRight.location.replace('http://www.aspheute.com/');
</script>
... // hier folgt left.htm per #include ...

Dieser Code wird in der Funktion TargetedRedirect erzeugt. Diese will ich nun nicht länger vorenthalten:

<script language="vbscript" runat="server">
Sub TargetedRedirect(ByVal strTarget, ByVal strTargetFrame, ByVal bDontTouchHistory)
    Response.Write "<scr" & "ipt language=""JavaScript"">" & vbCrLf
    Response.Write "parent." & strTargetFrame & ".location."
    If True = bDontTouchHistory Then
        Response.Write "replace(" & "'" & strTarget & "');"
    Else
        Response.Write "href='" & strTarget & "';"
    End If
    Response.Write vbCrlf & "</scr" & "ipt>" & vbCrlf
End Sub
</script>

Die ersten beiden Parameter sind selbsterklärend, interessant wird der dritte. Anhand dieses boolschen Parameters wird unterschiedliches JavaScript gerendert - einmal wird die History des Browsers nicht verändert, im anderen Falle wird der Redirect in die History eingetragen. Ein Parameter, der durchwegs nützlich werden kann.

Vielleicht fragt sich der eine oder andere, warum ich die <script> Blöcke so zerlegt habe. Nun, das hat einen guten Grund: der ASP Parser ist nicht gerade der Beste, er verstolpert sich über solche Tags mit der folgenden Fehlermeldung:

Active Server Pages error 'ASP 0138' 

Nested Script Block 
/aspheute/redirects/RedirectSample.asp, line 3 
A script block cannot be placed inside another script block. 

Ein bekanntes Problem, das durch Zerstückelung der Strings leicht gelöst werden kann.

Schlußbemerkung

Ein Problem bleibt klarerweise - hat der Benutzer JavaScript ausgeschaltet, dann ist die heute vorgestellte Methode funktionsuntüchtig. Nur um dieses Problem gibt es dann tatsächlich keinen Weg herum.

Download des Codes

Klicken Sie hier, um den Download zu starten.

Verwandte Artikel

Eigene History
Erstellung eines Intranets in ASP (Teil 3) - Navigation
Flash Detection ohne Komponente
JavaScript & DHTML - Wie man Fehler findet bevor die Kunden es tun
Session State bei parallelen Browser-Frames und Fenstern

Wenn Sie jetzt Fragen haben...

Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten.

Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.

 

Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.

Bewerten Sie diesen Artikel
 Sehr gut   Nicht genügend  
   1  2  3  4  5  
 

  
   Für Ausdruck optimierte Seite

©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.