Laboratorio di Tecnologie Web HTML: Altri elementi Dott. Stefano Burigat www.dimi.uniud.it/burigat Oltre a quelli chhe abbiamo visto in precedenza, l'HTML5 supporta diversi altri elementi che vengono utilizzati principalmente per inserire all'interno delle pagine web contenuti addizionali come audio, video, script, codice CSS, meta-informazioni, etc. In questo capitolo, ne vedremo alcuni dei più comuni. iframe L'elemento contenitore <iframe> consente di inserire un documento html o un'altra risorsa all'interno di una pagina web. Il risultato viene tipicamente mostrato come una finestra all'interno di una pagina, con delle scrollbar se lo spazio necessario alla risorsa è più lungo dello spazio a disposizione, determinato dalle dimensioni della finestra specificate tramite gli attributi “width” e “height”. L'attributo “src” viene utilizzato per specificare l'indirizzo della risorsa che si vuole visualizzare all'interno della finestra. Se un browser non supporta l'elemento <iframe>, viene visualizzato solo il contenuto presente al suo interno (non la risorsa specificata tramite src). <!DOCTYPE html> <html> <head> <title>Uso di iframe</title> </head> <body> <h1>Esempio d'uso dell'elemento iframe</h1> <p>Questo testo fa parte del documento originale</p> <iframe src="teoria/html5.html" width="320" height="200"> <p>Questo testo viene visualizzato se il browser non supporta iframe.</p> </iframe> <p>Anche questo testo fa parte del documento originale</p> </body> </html> Al giorno d'oggi, l'elemento <iframe> può essere utilizzato per mantenere separato il contenuto proveniente da sorgenti esterne (ad esempio, pubblicità o widget di terze parti) in modo che non ci sia interferenza con gli script ed il contenuto principale delle pagine. Video e audio Fino ad HTML5, i browser web non avevano alcun meccanismo nativo per gestire video e audio e dovevano affidarsi a plug-in esterni, in particolare a Flash che di fatto ha rappresentato lo standard per la gestione di contenuti multimediali sul web. HTML5 ha introdotto due nuovi elementi, <video> e <audio>, che consentono l'inserimento di contenuti video e audio senza necessità di plug-in. La contemporanea scelta di Apple di non supportare Flash sulle sue piattaforme mobili, di Adobe di non continuare lo sviluppo della versione mobile di Flash e di Microsoft di non supportare il media player Silverlight fanno pensare che il futuro del multimedia su web sia rappresentato da HTML5. Gli elementi <video> e <audio> sono ben supportati dai browser (eccetto IE8 e precedenti, e Opera Mini) ma il supporto dei diversi formati video e audio che possono essere utilizzati non è uniforme. Nella scelta dei formati da utilizzare per il video e l'audio vanno considerati due aspetti, il codec cioè il metodo con cui l'informazione viene codificata/decodificata e il formato contenitore utilizzato per raggruppare i dati multimediali e i metadati che descrivono i dati. Le opzioni di formato più comuni per i video sul web sono le seguenti tre: • Contenitore OGG + Codec video Theora + Codec audio Vorbis • Contenitore MPEG-4 + Codec video H.264 + Codec audio AAC • Contenitore WebM + Codec video VP8 + Codec audio Vorbis Non tutti i browser supportano tutte queste combinazioni per cui è necessario creare versioni differenti dei video nei diversi formati. Anche per quanto riguarda l'audio ci sono diverse opzioni: • MP3 (è sia codec che contenitore), richiede pagamento di licenza da parte delle aziende software/hardware che vogliono utilizzarlo • WAV (è sia codec che contenitore) • Contenitore OGG + Codec audio Vorbis (estensione .ogg o .oga) • Contenitore MPEG-4 + Codec audio AAC (estensione .m4a) • Contenitore WebM + Codec audio Vorbis (estensione .webm) Aggiungere video ad una pagina Se si stanno progettando pagine web per uno specifico browser (quindi sapendo esattamente il formato video supportato) allora è possibile aggiungere un video utilizzando l'elemento <video>, specificando il file video tramite l'attributo “src”. L'esempio seguente inserisce un video in formato webm. <!DOCTYPE html> <html> <head> <title> Tecnologie web </title> </head> <body> <h1>Esempio di video embedded HTML5</h1> <video src="video/bunny.webm" width="640" height="360" poster="imgs/rodents.png" controls autoplay>Il browser utilizzato non è in grado di riprodurre questo video.</video> </body> </html> Gli attributi “width” e “height” servono a specificare le dimensioni del box in cui verrà inserito il media player per la visualizzazione del video. Il video verrà scalato per adattarsi a tali dimensioni (per cui è preferibile inserire come dimensioni le stesse del video da mostrare). L'attributo “poster” serve a specificare un'immagine che verrà mostrata al posto del video in fase di caricamento o se il video non è presente. L'attributo “controls” mostra i controlli per la gestione del video. L'attributo “autoplay” permette di iniziare automaticamente la riproduzione del video non appena ne è stata scaricata una porzione sufficiente (in generale, è preferibile lasciare che sia l'utente a decidere quando far partire il video). L'attributo “loop” permette di mettere il video in riproduzione continua. L'attributo “muted” permette di riprodurre il video senza audio. L'attributo “preload” lascia decidere al browser quando iniziare lo scaricamento dei dati video (preload=“auto”) oppure fa iniziare lo scaricamento nel momento in cui l'utente preme il pulsante play (preload=“none”). Poichè browser diversi supportano formati diversi, una soluzione come la precedente non è sufficientemente generale. Per ovviare a tale problema, è possibile utilizzare l'elemento <source> all'interno dell'elemento <video>. Ad esempio, se si vogliono supportare tutti e tre i formati riportati in precedenza, è necessario inserire tre elementi <source>, uno per ogni formato, come nell'esempio seguente. Il browser esaminerà la lista fino a trovare un formato supportato da poter utilizzare. <!DOCTYPE html> <html> <head> <title> Tecnologie web </title> </head> <body> <h1>Esempio di video embedded HTML5</h1> <video width="640" height="360" poster="imgs/rodents.png" controls preload="auto"> <source src="video/bunny.mp4" type='video/mp4; codecs="avc1.424E01E, mp4a.40.2"'/> <source src="video/bunny.webm" type='video/webm; codecs="vp8, vorbis"'/> <source src="video/bunny.ogv" type='video/ogg; codecs="theora, vorbis"'/> <div>Il browser utilizzato non è compatibile con questo video.</div> </video> </body> </html> L'attributo “src” dell'elemento <source> specifica la posizione del video da riprodurre mentre l'attributo “type” serve ad indicare il tipo di file e (opzionalmente) il codec video/audio utilizzato. Notate che il valore dell'attributo “type” è tra virgolette singole anziché doppie in quanto le doppie virgolette sono necessarie per racchiudere i codec. L'ordine degli elementi <source> non è importante ma per ragioni di compatibilità è preferibile specificare per primo il formato mp4. Se si vuole rendere disponibile un video anche agli utenti il cui browser non supporta HTML5, è necessario includere un player Flash nella pagina oppure utilizzare un servizio come YouTube o Vimeo che consente di pubblicare un video online e renderlo disponibile su una pagina web tramite del codice fornito dal servizio stesso. Il codice seguente aggiunge all'esempio precedente un player Flash e dei link per il download del video, garantendo la massima compatibilità possibile. <!DOCTYPE html> <html> <head> <title> Tecnologie web </title> </head> <body> <h1>Esempio di video embedded HTML5 con fallback Flash e link per il download</h1> <video width="640" height="360" poster="imgs/rodents.png" controls preload="auto"> <source src="video/bunny.mp4" type='video/mp4; codecs="avc1.424E01E, mp4a.40.2"'/> <source src="video/bunny.webm" type='video/webm; codecs="vp8, vorbis"'/> <source src="video/bunny.ogv" type='video/ogg; codecs="theora, vorbis"'/> <object type="application/x-shockwave-flash" data="flash/flowplayer-3.2.18.swf" width="640" height="360"> <param name="movie" value="flash/flowplayer3.2.18.swf" /> <param name="flashVars" value="config={'playlist': ['imgs/rodents.png', {'url':'video/bunny.mp4','autoPlay':false}]}" /> <img alt="Big Buck Bunny" src="imgs/rodents.png" width="640" height="360" title="Il browser utilizzato non è in grado di riprodurre questo video" /> </object> </video> <p>Download del video:</p> <ul> <li><a href="video/bunny.mp4">Formato MPEG-4</a></li> <li><a href="video/bunny.ogv">Formato Ogg Theora</a></li> </ul> </body> </html> Per inserire un player Flash che permetta di riprodurre video per i browser dotati di plug-in Flash, è necessario utilizzare l'elemento <object>. Tale elemento può essere utilizzato in generale per inserire una risorsa esterna all'interno di una pagina web. L'attributo “type” serve a specificare il tipo di contenuto e l'attributo “data” la risorsa che si vuole inserire, nell'esempio precedente un player Flash chiamato flowplayer. Gli attributi “width” ed “height” specificano le dimensioni dello spazio dedicato alla visualizzazione della risorsa. All'interno dell'elemento <object>, alcuni elementi <param> specificano i parametri necessari alla visualizzazione della risorsa (che dipendono dal tipo di risorsa e sono inseriti come coppia chiave/valore dove la chiave è rappresentata dall'attributo “name” ed il valore dall'attributo “value”). Nel caso in esame, i parametri servono in particolare a specificare il file video da riprodurre tramite il player Flash. All'interno di <object> è stato inserito anche un elemento <img> che viene visualizzato nel caso in cui nemmeno il player Flash sia in grado di riprodurre il video. Infine, all'esterno dell'elemento <video> sono stati inseriti alcuni link, in formato diverso, al file video in caso nessuna delle soluzioni precedenti abbia successo. Aggiungere audio ad una pagina Per aggiungere audio ad una pagina, si può utilizzare l'elemento <audio> in modo simile a quanto fatto per <video>. Gli attributi utilizzabili sono gli stessi di <video> tranne “width”, “height” e “poster” che non sono presenti. <!DOCTYPE html> <html> <head> <title> Tecnologie web </title> </head> <body> <h1>Esempio di audio embedded HTML5 con link per il download</h1> <audio id="soundtrack" controls preload="auto"> <source src="audio/soundtrack.mp3" type="audio/mp3"> <source src="audio/soundtrack.ogg" type="audio/ogg"> <source src="audio/soundtrack.webm" type="audio/webm"> </audio> <p>Download della canzone:</p> <ul> <li><a href="audio/soundtrack.mp3">MP3</a></li> <li><a href="audio/soundtrack.ogg">Ogg Vorbis</a></li> </ul> </body> </html> Canvas Un componente estremamente interessante di HTML5 è la Canvas API, un insieme di funzioni JavaScript che permettono di disegnare sullo schermo in un'area definita tramite l'elemento <canvas>. Tramite questa API è possibile disegnare in modo dinamico sullo schermo anche in base alle azioni degli utenti, rendendo quindi possibile creare animazioni, giochi o intere applicazioni interattive senza la necessità di plug-in proprietari. Dal punto di vista dell'HTML, per poter utilizzare la Canvas API è innanzitutto necessario aggiungere ad una pagina web l'elemento contenitore <canvas>, specificando le dimensioni dell'area in cui si vuole disegnare tramite gli attributi “width” ed “height” e l'identificatore dell'elemento tramite attributo “id”. Successivamente, è necessario inserire il codice JavaScript che effettua le operazioni di disegno. Nell'esempio seguente il codice JavaScript viene inserito direttamente all'interno dell'elemento <head> della pagina web tramite l'elemento <script>. L'esempio consiste nel semplice disegno di una riga colorata. Un esame approfondito della Canvas API è al di fuori dello scopo di questo materiale. <!DOCTYPE html> <html> <head> <title> Tecnologie web </title> <script type="text/javascript"> window.addEventListener('load', eventWindowLoaded, false); function eventWindowLoaded() { var canvas = document.getElementById('prova_canvas'); var context = canvas.getContext('2d'); context.strokeRect(0,0,400,400); context.beginPath(); context.moveTo(50, 50); context.lineTo(350, 350); context.strokeStyle = "red"; context.stroke(); } </script> </head> <body> <h1>Esempio di utilizzo della Canvas API</h1> <canvas id="prova_canvas" width="400" height="400"> <p>Il browser utilizzato non supporta la Canvas API </canvas> </body> </html> <meta> L'elemento <meta> viene utilizzato per aggiungere ad una pagina web informazioni relative alla pagina stessa (che non vengono visualizzate all'utente). E' uno degli elementi che vengono inseriti all'interno dell'elemento <head> e può essercene più di una istanza contemporaneamente. Viene comunemente utilizzato per chiarire il tipo di informzione presente sulla pagina, la codifica di carattere utilizzata, informazioni sull'autore, etc. Ne abbiamo visto un esempio di utilizzo quando abbiamo trattato i link, per gestire il redirect automatico ad una nuova pagina. <meta http-equiv="refresh" content="10; URL=newpage.html" /> In questo caso sono stati utilizzati gli attributi “http-equiv” e “content” che vengono sempre utilizzati in combinazione. L'attributo “content” può anche specificare il valore di una proprietà definita tramite l'attributo “name” come nell'esempio seguente. <meta name="author" content="Nome Autore" /> I seguenti due esempi definiscono la codifica di carattere utilizzata dal documento (il secondo esempio integra anche informazione sul tipo di documento). La codifica di carattere specifica come il documento deve essere convertito in byte quando viene salvato come file e viceversa. Attualmente, la codifica di carattere più utilizzata è l'UTF8 che consente anche di rappresentare caratteri in lingue diverse dall'inglese. Affinchè venga utilizzata la codifica corretta è comunque necessario verificare che l'editor usato per scrivere le pagine web salvi i documenti nel formato desiderato. <meta charset="UTF-8"> <meta http-equiv="content-type" content="text/html; charset=UTF-8">