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

Flash Detection ohne Komponente

Geschrieben von: Christoph Wille
Kategorie: ASP Tricks

This printed page brought to you by AlphaSierraPapa

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:

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

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.

This printed page brought to you by AlphaSierraPapa

Download des Codes

Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20020320.zip

Verwandte Artikel

Browsereigenschaften mit BrowserHawk 2000 bestimmen
http:/www.aspheute.com/artikel/20000410.htm
Caching bei Browser und Proxy - Woher Seiten wirklich kommen
http:/www.aspheute.com/artikel/19990808.htm
Cookies in Flash mittels ASP manipulieren
http:/www.aspheute.com/artikel/20000908.htm
Datenaustausch zwischen Macromedia Flash und ASP
http:/www.aspheute.com/artikel/20000719.htm
Flash Movies einbetten einfach gemacht
http:/www.aspheute.com/artikel/20020321.htm
Flash Plug-In Erkennung
http:/www.aspheute.com/artikel/20000411.htm
Klassen in VBScript
http:/www.aspheute.com/artikel/20000526.htm
Redirects mit Frame-Targets
http:/www.aspheute.com/artikel/20010530.htm

Links zu anderen Sites

moock fpi
http://www.moock.org/webdesign/flash/detection/moockfpi/

 

©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.