Silverlight versus Flash oder ein Splash Screen ist kein Preloader!

Moderne Rich Internet Applications erreichen nicht nur eine beachtliche Funktionsvielfalt sondern auch eine durchaus spürbare Dateigröße, die das Vorausladen der Inhalte und die Visualisierung des Ladeprozesses erforderlich macht. Das ist bei Silverlight nicht anders als bei Flash. Doch Silverlight verhält sich ein wenig anders als Flash und hat auch mit „Splash Screen“ gleich einen anderen Namen dafür erhalten.

Ein Splash Screen ist kein Bestandteil der Anwendung sondern wird unabhängig als splashscreensource-Parameter des Silverlight PlugIns im HTML-Dokument gesetzt. Das hat den Vorteil, dass zu jeder Zeit ein „Preloader“ zu einer Silverlight-Anwendung hinzugefügt werden kann, ohne dass dies die eigentliche Anwendung in irgendeiner Form beeinflusst. Aber genau darin liegt auch der Nachteil: Es werden keine Ressourcen geteilt und es ist auch kein fließender Übergang vom Splash Screen zur Anwendung möglich. Sollte das erforderlich sein, dann ist ein „Stub Loader“, also eine möglichst kleine Anwendung erforderlich, die sich explizit um das Nachladen der dann vermutlich Bandbreiten verschlingenden Reste kümmert. Dieses Verfahren mit einer möglichst leichtgewichtigen Startanwendung ist so übrigens auch in der Flash-Welt durchaus gängig! Für einfache Anforderungen ist aber der Splash Screen nützlich und außerdem leicht implementiert.

Die Angabe der von Silverlight zu nutzenden XAML-Datei (keine XAP-Datei sondern wie bei Silverlight 1 ein XAML-Dokument) sowie die zugehörigen optionalen Ereignis-Handler für den Ladefortschritt (onSourceDownloadProgressChanged) und den Abschluss des Ladevorgangs (onSourceDownloadComplete) erfolgen im HTML-Dokument.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<object data="data:application/x-silverlight," type="application/x-silverlight-2-b2" width="100%" height="100%">
	<param name="source" value="ClientBin/Application.xap"/>
	<param name="onerror" value="onSilverlightError" />
	<param name="background" value="white" />
 
	<!-- Preloader Controller -->
	<param name="splashscreensource" value="Preloader.xaml"/>
	<param name="onSourceDownloadProgressChanged" value="onSourceDownloadProgressChanged" />
	<param name="onSourceDownloadComplete" value="onSourceDownloadComplete" />
 
	<a href="http://go.microsoft.com/fwlink/?LinkID=115261" style="text-decoration: none;">
		<img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none"/>
	</a>
</object>

Nun folgt der etwas mühsame Teil: Sämtliche Logik muss in profanem JavaScript wie zu Silverlight 1 Zeiten verfasst und in das HTML-Dokument integriert werden.

1
2
3
4
5
6
7
8
function onSourceDownloadProgressChanged(sender, eventArgs) {
	var percentage = eventArgs.progress;      
	// your code here
}
 
function onSourceDownloadComplete(sender, eventArgs) {
	// your code here
}

Den Rest erledigt das Silverlight PlugIn dann aber von alleine.