Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Il markup XHTML per le applicazioni Silverlight 2.0

Il codice necessario per inserire Silverlight 2.0 nelle pagine Web
Il codice necessario per inserire Silverlight 2.0 nelle pagine Web
Link copiato negli appunti

Ormai è noto che Silverlight ci consente di integrare le nostre pagine Web con animazioni, player video, menu dinamici, etc. In questo articolo esaminiamo da vicino il markup necessario all'integrazione di un elemento Silverlight 2 all'interno di una qualsiasi pagina Web. Le novità introdotte con la versione 2.0, in questo senso, sono principalmente due:

  • la possibilità di generare i file .xap, che semplificano la gestione degli elementi silverlight all'interno del markup (X)HTML
  • il nuovo elemento <asp:Silverlight> che possiamo aggiungere in Visual Studio o Visual Web Developer Express(SP1), grazie ai Microsoft Silverlight Tools e che semplifica l'importazione di elementi Silverlight nelle WebForm.

Per il controllo asp.net possiamo contare sull'aiuto del framework, che si occupa di trasformare la dichiarazione dell'elemento <asp:Silverlight> e di generare il contenitore per la nostra applicazione. È opportuno quindi occuparci di come inserire le applicazioni Silverlight 2 nel comune markup XHMTL.

La procedura non è molto differente da quella utilizzata per le animazioni realizzate in Flash. Anche nel nostro caso l'elemento principale è <object>, il tag preposto dal W3C per l'inserimento di qualsiasi elemento multimediale.

Il codice che viene generato automaticamente da Visual Studio o da Expression Blend è molto simile al seguente:

Codice "classico" generato automaticamente

<div id="silverlightControlHost">

<object Data="data:application/x-silverlight," type="application/x-silverlight-2" Width="400" Height="300">
  <param Name="source" value="EsempioSilverlight.xap"/>
  <param Name="onerror" value="onSilverlightError" />
  <param Name="onResize" value="onResizeHandler" />
  <param Name="Background" value="white" />
  <param Name="initParams" value="nomeParam=ValoreParam,nomeParam2=ValoreParam2" />
  <param Name="minRuntimeVersion" value="2.0.31005.0" />
  
  <a href="http://go.microsoft.com/fwlink/?LinkID=108182" Style="text-decoration: none;">
    <img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" Style="border-Style: none"/>
  </a>
</object>

<iframe Style='Visibility:hidden;Height:0;Width:0;border:0px'></iframe>

</div>

Prima di entrare nel dettaglio dei parametri e degli attributi, notiamo il link con immagine dichiarato all'interno dell'<object>. Questa parte viene visualizzata se, sul client, non è stato installato il plugin di Silverlight 2. In questo caso appare l'immagine che ci invita a scaricarlo per far funzionare la pagina.

Altri elementi anomali sono è l'<iframe> vuoto che troviamo in basso e il contenitore silverlightControlHost. Il <div> può essere utile all'impaginazione e alla degradazione del controllo o come riferimento per alcuni script, mentre l'<iframe> serve a risolvere problemi di compatibilità con alcuni browser come Safari (stando a quanto trovato su MSDN). In ogni caso sono entrambi elementi facoltativi, possiamo inserire il nostro oggetto Silverlight utilizzando un markup semplificato:

Codice minimo per la visualizzazione dell'applicazione Silverlight

<object data="data:application/x-silverlight," type="application/x-silverlight-2" width="300" height="300">
<param name="source" value="esempio.xap"/>
</object>

Naturalmente possiamo sfruttare le potenzialità di XHTML per aggiungere parametri da passare all'applicazione multimediale e, grazie a questi, passare impostazioni e gestire eventi.

Attributi

Nel tag <div> troviamo l'attributo id, che serve come nome identificativo univoco per fare riferimento all'oggetto nella pagina (X)HTML. Possiamo dare un nome qualunque all'id, ciò che conta è che unico nella pagina.

Passiamo all'elemento <object>. Gli attributi data e type servono rispettivamente a specificare tipo di mime type dell'applicazione (in questo definiamo una applicazione Silverlight) e la versione del plugin che utilizziamo (in questo caso Silverlight 2.0).

Il significato degli attribti width e height è più intuitivo, rappresentano larghezza e altezza dell'oggetto. Possiamo definire queste dimensioni sia in termini di pixel, sia di percentuali rispetto al contenitore.

Parametri

A questo punto esaminiamo l'impostazione dei parametri necessari alla visualizzazione del nostro oggetto. Come abbiamo visto possiamo fare a meno di tutti i parametri tranne che di source, che ci serve per definire l'URL, ovvero l'indirizzo del file .xap che contiene l'applicazione. Possiamo inserire un indirizzo assoluto o relativo.

Gli altri parametri sono opzionali ma sono quelli che ci aiutano ad aumentare il controllo sull'oggetto:

Parametro Descrizione
background permette di impostare il colore di sfondo iniziale dell'applicazione nel momento in cui viene caricata. Possiamo impostare i colori con i valori RGB e alpha. Il colore di default è il bianco (#ffffff)
InitParam consente di specificare dei parametri iniziali per la nostra applicazione. Questi vengono passati attraverso il formato nome->valore
splashScreenSource serve ad indicare l'URL di un file XAML che verrà utilizzato come loader dell'applicazione. Silverlight ha un loader di default, questo parametro consente di crearne uno personalizzato
maxFramerate indica un valore intero che specifica la velocità massima con cui la nostra applicazione viene riprodotta in termini di frame per secondo. Il valore di default è 60
Windowless valore booleano con il quale viene indicato (true) se rendere trasparente il plugin laddove non vi sono aree opache
minRuntimeVersion serve a specificare la versione minima richiesta del plugin per il corretto funzionamento dell'applicazione
autoUpgrade valore booleano, che indica al plugin se effettuare l'aggiornamento automatico o meno

Tra i parametri possiamo impostare anche elementi dell'interazione con la pagina ospite grazie alla definizione degli eventi. Silverlight 2 consente di gestire alcuni eventi che vengono lanciati dal plug-in che possono essere gestiti tramite JavaScript.

In particolare è utile inserire i gestori per gli eventi:

  • onError, che viene sollevato in caso di errore da parte dell'applicazione. Consente di gestire eventuali eccezioni
  • onResize, viene sollevato quando le proprietà ActualHeight ed ActualWidth vengono reimpostate

Altri eventi che possono renderci la vita più semplice sono:

  • onLoad, viene invocato nel momento in cui la nostra applicazione viene lanciata, ma prima che l'utente visualizzi il suo contenuto
  • onSourceDownloadComplete, sollevato nel momento in cui la nostra applicazione ha terminato di essere scaricata
  • onSourceDownloadProgressChanged, sollevato per ogni cambiamento di quantità di applicazione che è stata scaricata

Gestire gli eventi

Per gestire gli eventi, come ad esempio gli errori generati dal plug-in, sollevati attraverso l'evento onError, possiamo utilizzare delle semplici funzioni JavaScript:

function onSilverlightError(sender, args)
{
  if (args.errorType == "InitializeError")
  {
    var errorDiv = document.getElementById("errorLocation");
    
    if (errorDiv != null)
      errorDiv.innerHTML = args.errorType + "- " + args.errorMessage;
  }
}

In questo modo ogni eccezione sollevata dal plug-in viene gestita mostrando un messaggio di errore. Perché funzioni queto script dobbiamo ovviamente aver predisposto un <div> (o un altro elemento) con id="errorLocation".

Come tutti i delegati, anche le nostre funzioni client avranno come parametri gli oggetti:

  • sender, ovvero l'elemento che ha scatenato l'evento
  • args, eventuali argomenti allegati all'evento

Ad esempio, possiamo gestire le singole eccezioni analizzando il tipo di errore occorso. L'oggetto args, attraverso la proprietà errorType espone l'eccezione sollevata.

Possiamo anche decidere di non gestire gli eventi, ad esempio dichiarando un gestore vuoto. Vediamo come fare con il ridimensionamento:

function onResizeHandler(sender, args) { }

Ti consigliamo anche