Aktuell habe ich das ppedv Logo auf der ppedv Startseite durch eine Silverlight Anwendung ersetzt um zu Marketing für unsere kommen Twittertage zu machen. Von Donnerstag bis Sonntag gibts per #ppedv Twittertag Hammeraktionen. Natürlich soll die Website für alle Kunden nach wie vor das Logo präsentieren.
Silverlight 4 ist installiert.
Da die Anwendung per Silverlight 4 entwickelt wurde ist das der einfachste Fall. Einfach den Object Tag in den HTHL Code einfügen. Da die Silverlight Anwendung über den HTML Inhalt liegen soll muss der Hintergrund in XAML transparent sein. Im Object Element braucht man zwei Attribute windowless und background.
<object style="float: left;" data="data:application/x-silverlight-2,"
type="application/x-silverlight-2"
width="400" height="100">
<param name="source" value="/ClientBin/ppedvlogo.xap"/>
<param name="windowless" value="true"/>
<param name="background" value="transparent" />
<param name="minRuntimeVersion" value="4.0.50401.0" />
</object>
Silverlight ist nicht installiert
Um zu testen was passiert wenn Silverlight nicht installiert ist, kann man einfach aus dem Wert x-Silverlight-2 einen anderen z.B. x-silverlight-3 machen. Da Silverlight von Version 2-4 immer mit den gleichen Eintrag referenziert wird, wird so auf ein unbekanntes Plugin verwiesen. Was ident mit keinem installierten Silverlight ist. Dann kann man ein alternatives HTML Template innerhalb des Object Elements definieren. In meinem Fall das ppedv Logo als png. Um zu verhindern das ein Dialog hochkommt der den Benutzer zum installieren von Silverlight auffordert, habe ich autoupgrade auf false gesetzt. Ist ja schliesslich nicht unser Job Silverlight auszurollen.
<object style="float: left;" data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="400" height="100">
<param name="source" value="/ClientBin/ppedvlogo.xap"/>
<param name="windowless" value="true"/>
<param name="background" value="transparent" />
<param name="minRuntimeVersion" value="4.0.50401.0" />
<param name="autoUpgrade" value="false" />
<img src="http://www.ppedv.de/Images/ppedv_sternelogo.png" border="0" />
</object>
Silverlight ist in der falschen Version installiert
Der kompliziertere Fall ist wenn Silverlight vorhanden ist aber z.B. das Plugin Version 2 hat und die XAP Anwendung mit Silverlight 3 oder 4 geschrieben ist. Das kann man ganz nett simulieren indem man in das Attribute minRuntimeVersion einen Wert 5.0 reinschreibt. Silverlight 5 gibt es schlicht noch nicht. Dann kommt in einer Standard Anwendung ein JScript Exception. Auch dies unpassend für die ppedv Webseite.
In diesem Fall habe ich den Object Tag in ein DIV gepackt und tausche dann schlicht per Jscript den Inhalt durch ein HTML Image Element aus. Silverlight kann per Attribut onError festlegen welche Jscript Methode im Fehlerfall aufgerufen werden soll.
<div id="silverlightControlHost">
<object style="float: left;" data="data:application/x-silverlight-2,"
type="application/x-silverlight-2" width="400" height="100">
<param name="source" value="/ClientBin/ppedvlogo.xap"/>
<param name="windowless" value="true"/>
<param name="background" value="transparent" />
<param name="minRuntimeVersion" value="4.0.50401.0" />
<param name="autoUpgrade" value="false" />
<param name="onError" value="onSilverlightError" />
<img src="http://www.ppedv.de/Images/ppedv_sternelogo.png" border="0"/>
</object>
</div>
Dann noch ein kurzes Stück JavaScript das den Fehler Code 8001 behandelt.
<script type="text/javascript">
function onSilverlightError(sender, args) {
var iErrorCode = args.ErrorCode;
if (iErrorCode==8001)
{
document.getElementById("silverlightControlHost").innerHTML =
'<img style="float: left;" src="http://www.ppedv.de/Images/ppedv_sternelogo.png" border="0" />';
}
}
</script>