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

Flash Detection ohne Komponente

Geschrieben von: Christoph Wille
Kategorie: ASP Tricks

Eine unter Webprogrammierern äußert "beliebte" Aufgabe ist es, ein Flash-Movie einzubinden und zwar so, daß der Browser des Benutzers vorher abgefragt wird, ob denn Flash überhaupt und in welcher Version installiert ist. Das Problem kann mit der BrowserHawk Komponente gelöst werden, oder gratis mit dem moock fpi.

Der moock flash player inspector (kurz moock fpi) ist im Prinzip nichts anderes als ein JavaScript, das folgende Aufgabenstellungen bewältigen kann:

  • Explizite Detection-Seite, von der aus automatisch auf die Flash-Seite, eine Update-Seite oder eine Kein Flash-Seite umgeleitet (redirected) wird.
  • Inline Detection, bei der der Flash-Check in der Seite direkt ausgeführt wird (und dann entweder das Movie oder alternativer Inhalt angezeigt wird)

Die Version, auf der der Artikel basiert ist 1.3.5, und kann von moock.org downgeloadet werden. Im heutigen Artikel verändere ich die Skripts allerdings etwas, um das Einbinden in ASP Seiten zu vereinfachen.

Die Originalscripts

Die Arbeit von moock fpi passiert in folgenden Scripts (Reihenfolge der Abarbeitung):

  • fpi-init.js Initialisiert die Variablen für die Redirect bzw. Inline Modi.
  • fpi-writevb.js Schreibt die IE Flash Detection
  • fpi-main.js Hauptcode der Detection
  • fpi-swap.js Optionale Datei bei Verwendung des Inline Modus. Beinhaltet das Movie und den alternativen Content.

Diese Scripts kann man ohne Umschweife sofort einsetzen (Samples sind bei moock fpi mit dabei), doch spätestens nach der ersten Verwendung wundert man sich: in fpi-init.js und fpi-swap.js sind etliche wichtige Variablen hardcodiert, was zur Folge hat, daß man für jedes Movie diese beiden Dateien anpassen müßte - das kann es ja wohl nicht sein!

Die FlashDetector Klasse

Um es möglichst flexibel zu gestalten, und nicht globale Variablen einführen zu müssen, habe ich die Flash Detection in eine Klasse verpackt, passend benannt als FlashDetector. Das Grundgerüst sieht wie folgt aus:

<script language="vbscript" runat="server">
Class FlashDetector
  ' General Properties
  Public RequiredVersion
  Public UseRedirect

  ' Redirect to Flash Movie Properties
  ' (UseRedirect = True)
  Public FlashPage
  Public NoFlashPage
  Public UpgradePage

  ' Page-Inline Flash Movie Properties
  ' (UseRedirect = False)
  Public AlternateContent
  Public MovieWidth
  Public MovieHeight
  Public MovieUrl

  Public Sub Initialize()
  End Sub

  ' Replaces fpi-init.js
  Public Function GetHeaderJS()
  End Function

  ' Replaces fpi-swap.js
  Public Function GetInlineMovieJS()
  End Function
End Class
</script>

Alle ehemals hardcodierten JavaScript Variablen sind in dieser Klasse als Properties verfügbar, und die Initialize Methode setzt diese auf die Standardwerte, die auch moock fpi besitzt. Die beiden Methoden GetHeaderJS und GetInlineMovieJS liefern dann den Html Code, den wir in unsere Seiten einbauen müssen: ersterer kommt in die HEAD Sektion der Seite, der zweite wird nur bei Inline Movies eingesetzt.

Ich erspare uns hier die Listings für beide Methoden, nur ein wichtiger Hinweis: die Dateien fpi-init-asp.js, fpi-writevb.js und fpi-main.js werden von der GetHeaderJS Funktion verwendet. Die Pfade sind relativ implementiert - wer die JS Dateien in ein separates Verzeichnis verschieben will, muß folgende Zeilen in DetectFlashClass.asp verändern:

strHtml = strHtml & "<SCRIP" & "T LANGUAGE=""JavaScript"" type=""text/javascript""" & _
    " src=""fpi-init-asp.js""></SCRIP" & "T>" & vbCrlf
strHtml = strHtml & "<SCRIP" & "T LANGUAGE=""JavaScript"" type=""text/javascript""" & _
    " src=""fpi-writevb.js""></SCRIP" & "T>" & vbCrlf
strHtml = strHtml & "<SCRIP" & "T LANGUAGE=""JavaScript"" type=""text/javascript""" & _
    " src=""fpi-main.js""></SCRIP" & "T>" & vbCrlf

Einfach bei src den Pfad absolut angeben, fertig.

Eine explizite Detection Seite

Nun sehen wir uns die Verwendungsszenarien an, beginnend bei der Variante einer expliziten Detection Seite. Im Prinzip habe ich das originale Beispiel nur auf die Klasse angepasst; der untenstehende ASP Code ist im Download als CheckByRedirect.asp mit dabei:

<%
Response.Expires=0
Response.AddHeader "Pragma","no-cache"
Response.AddHeader "cache-control", "no-store"
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD><TITLE>moock.fpi ASP Flash Detection Page</TITLE>
<!--#include file="DetectFlashClass.asp"-->
<%
Dim flashDetect, strHeader
Set flashDetect = New FlashDetector

' NOTE: the sample uses the defaults from Initialize
flashDetect.Initialize
strHeader = flashDetect.GetHeaderJS()
Response.Write strHeader
%>
</HEAD>
<BODY BGCOLOR="#FFFFFF">

<p>
Please wait while we are checking for Flash installed...
</p>

<NOSCRIPT>
  <META HTTP-EQUIV="Refresh" CONTENT="10;URL=<%=flashDetect.NoFlashPage%>"> 
</NOSCRIPT>

</BODY>
</HTML>

Nach dem Aufruf von Initialize sollte man auf alle Fälle die Eigenschaften FlashPage, NoFlashPage und UpgradePage setzen. RequiredVersion ist durch Initialize auf 5 gesetzt, moock fpi unterstützt in der aktuellen Version aber bereits Flash 6.

Inline Detection

Oftmals möchte man keine Flash-Detection Seite vorschalten, sondern direkt auf der Seite entscheiden, was angezeigt werden soll. Dann kann man bei FlashDetector die Eigenschaft UseRedirect auf False setzen, und direkt mit den Movie* und AlternateContent Eigenschaften arbeiten (InlineCheck.asp):

<%
Response.Expires=0
Response.AddHeader "Pragma","no-cache"
Response.AddHeader "cache-control", "no-store"
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD><TITLE>moock.fpi ASP</TITLE>
<!--#include file="DetectFlashClass.asp"-->
<%
Dim flashDetect, strHeader
Set flashDetect = New FlashDetector

flashDetect.Initialize
flashDetect.UseRedirect = False
flashDetect.AlternateContent = "<IMG SRC=""altimage.gif"" HEIGHT=""400"" WIDTH=""550"">"

strHeader = flashDetect.GetHeaderJS()
Response.Write strHeader
%>
</HEAD>

<BODY BGCOLOR="#FFFFFF">

<%
strFlashContent = flashDetect.GetInlineMovieJS()
Response.Write strFlashContent
%>

<NOSCRIPT>
<%=flashDetect.AlternateContent%>
</NOSCRIPT>

</BODY>
</HTML>

Da ich das moock fpi Beispielmovie verwende (das in Initialize gesetzt wird), erspare ich mir das Setzen der Movie* Eigenschaften, nur AlternateContent wird von mir verwendet (ist standardmäßig ein Leerstring). An der Stelle, an der das Movie angezeigt werden soll, ruft man GetInlineMovieJS auf und schreibt den Inhalt an den Client.

Schlußbemerkung

Das moock fpi ist von Haus aus sehr praktisch und funktioniert in vielen Browsern - in der heute vorgestellten ASP Version ist es noch dazu einfach und flexibel einsetzbar. Und vor allem muß man kein JavaScript direkt editieren, dies wird alles automatisch von der VBScript Klasse passend generiert.

Download des Codes

Klicken Sie hier, um den Download zu starten.

Verwandte Artikel

Browsereigenschaften mit BrowserHawk 2000 bestimmen
Caching bei Browser und Proxy - Woher Seiten wirklich kommen
Cookies in Flash mittels ASP manipulieren
Datenaustausch zwischen Macromedia Flash und ASP
Flash Movies einbetten einfach gemacht
Flash Plug-In Erkennung
Klassen in VBScript
Redirects mit Frame-Targets

Links zu anderen Sites

moock fpi

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.