Flash Detection ohne Komponente
Geschrieben von: Christoph Wille 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 OriginalscriptsDie 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 KlasseUm 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 SeiteNun 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 DetectionOftmals 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ßbemerkungDas 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 CodesKlicken Sie hier, um den Download zu starten. Verwandte Artikel
Browsereigenschaften mit BrowserHawk 2000 bestimmen Links zu anderen SitesWenn 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.
©2000-2006 AspHeute.com |