ݺߣ

ݺߣShare a Scribd company logo
I linguaggi del Web – 2ª Ed. (3° Giorno)

 Diego La Monica – Web Solution Developer
 Email:       me@diegolamonica.info
 Web:         http://diegolamonica.info
 Twitter:     http://twitter.com/jast/
 ݺߣ Share: http://slideshare.net/diego.la.monica/
 Skype:       diego.la.monica
 Mobile:      +39 333 7235382
Chi sono?
●   Web solution developer
●   Membro di IWA/HWG
●   Membro del Consiglio Direttivo di IWA Italy da Febbraio 2009




                                                                     2
●   Membro del Gruppo di Lavoro Protocols & Format istituito dal W3C per
conto di IWA/HWG
●   Autore del tool “Wi.Li.” http://wili.diegolamonica.info
●   Autore del framework JavaScript “JAST” http://jastegg.it
●   Autore del framework PHP “ALPHA”
http://github.com/diegolamonica/ALPHA/

                  I linguaggi del Web – Diego La Monica – http://diegolamonica.info
                  International Webmasters Association - http://www.iwa.it
Il programma della giornata
                     Modulo 4 – AJAX
 Interazioni client/server




                                                                3
 Framework a confronto:
   ●   Framework jQuery
   ●   Mootools
   ●   YUI
   ●   JAST
             I linguaggi del Web – Diego La Monica – http://diegolamonica.info
             International Webmasters Association - http://www.iwa.it
Il programma della giornata
Modulo 5 – ARIA e l’accessibilità lato client




                                                             4
 Prendere un po' di ARIA
 Le tecnologie assistive
 Ruoli, stati e proprietà
 Strumenti per lo sviluppo accessibile
          I linguaggi del Web – Diego La Monica – http://diegolamonica.info
          International Webmasters Association - http://www.iwa.it
Nota sulla slide

Nell'angolo inferiore destro di alcune slide è
presente un “pallino” come è visibile in


                                                            5
questa slide.
Esso indica che per la slide è prevista una
sessione pratica.

         I linguaggi del Web – Diego La Monica – http://diegolamonica.info
         International Webmasters Association - http://www.iwa.it
Modulo 4 - AJAX

  I linguaggi del Web – Diego La Monica – http://diegolamonica.info
  International Webmasters Association - http://www.iwa.it
Cos'è AJAX

AJAX, acronimo di Asynchronous JavaScript and XML, è
una tecnica di sviluppo web per creare applicazioni web
interattive. L'intento di tale tecnica è quello di ottenere




                                                                 7
pagine web che rispondono in maniera più rapida, grazie
allo scambio in background di piccoli pacchetti di dati con
il server, così che l'intera pagina web non debba essere
ricaricata ogni volta che l'utente effettua una modifica.
(Wikipedia: AJAX)



              I linguaggi del Web – Diego La Monica – http://diegolamonica.info
              International Webmasters Association - http://www.iwa.it
Cosa si intende per AJAX?

Col tempo AJAX ha assunto un significato (impropriamente) più
esteso: è AJAX tutto ciò che modifica il DOM.




                                                                8
   ●   Caricamento di frammenti di pagina

   ●   Animazione di oggetti sulla pagina

   ●   Applicazione e modifica dello stile degli elementi sul
       documento

             I linguaggi del Web – Diego La Monica – http://diegolamonica.info
             International Webmasters Association - http://www.iwa.it
XMLHttpRequest alla base di tutto
function crea_XMLHttpRequest(){
    var obj = null;
    if(typeof(XMLHttpRequest) === "function" || typeof(XMLHttpRequest) === "object"){
        obj = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        obj = createFromActiveX();
    }
    return obj;
}




function createFromActiveX() {




}
    var aVersions = [ "MSXML2.XMLHttp.5.0", "MSXML2.XMLHttp.4.0",




    }
            var oXmlHttp = new ActiveXObject(aVersions[i]);
            return oXmlHttp;
        } catch (oError) { /* Do nothing */ }

    return null;
                                                                       9
              "MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp","Microsoft.XMLHttp" ];
    for (var i = 0; i < aVersions.length; i++) {
        try {




                I linguaggi del Web – Diego La Monica – http://diegolamonica.info
                International Webmasters Association - http://www.iwa.it
AJAX Graceful Degradation
●   L'esecuzione dello script avviene regolarmente

●   Se il set di istruzioni Javascript non è completamente




                                                     10
    implementato (Es. su dispositivi mobili di vecchia generazione

    o su browser testuali) esegue operazioni non basate su

    Javascript (eseguendo per ogni azione il reload completo

    della pagina) (Graceful Degradation)
             I linguaggi del Web – Diego La Monica – http://diegolamonica.info
             International Webmasters Association - http://www.iwa.it
Progressive Enhancement AJAX
●   Tutte le funzioni sono implementate senza necessità di
    Javascript
    Quando tutti i nodi del DOM sono disponibili



                                                    11
●



    si esegue un metodo che andrà ad alterare i nodi del
    DOM integrandoli con altri nodi, definendo nuove
    caratteristiche o inserendo degli script JavaScript.
    document.getElementById('myLink').onclick='…';
            I linguaggi del Web – Diego La Monica – http://diegolamonica.info
            International Webmasters Association - http://www.iwa.it
Intercettare il DOM Ready
●   Evento Load viene scatenato dopo che sono stati
    caricati tutti i contenuti degli elementi sul documento
    (img, object, javascript, stili)… Troppo tardi!




                                                    12
●   Evento DOM Ready viene scatenato quando la pagina
    HTML è stata caricata anche se i contenuti (css,
    javascript, immagini … ) non sono ancora disponibili.

            I linguaggi del Web – Diego La Monica – http://diegolamonica.info
            International Webmasters Association - http://www.iwa.it
Intercettare lo stato DOMReady
Per Firefox, Opera 8.x (o precedenti), Internet Explorer 9 e
Webkit (dalla versione 525):

document.addEventListener(document, "DOMContentLoaded", metodoDiStartup);




                                                          13
Modalità conforme alle specifiche delW3C




                I linguaggi del Web – Diego La Monica – http://diegolamonica.info
                International Webmasters Association - http://www.iwa.it
Intercettare lo stato DOMReady
Per Internet Explorer:

document.write("<scr" +
             "ipt id=__ie_init defer=defer " +
             "src=/slideshow/i-linguaggi-del-web-seconda-edizione-3-giornata/7390826/"/:"></script>");




                                                         14
var script = document.getElementById("__ie_init");
if ( script )
     script.onreadystatechange = function() {
         if ( this.readyState != "complete" ) return;
         metodoDiStartup();
    };
script = null;




                 I linguaggi del Web – Diego La Monica – http://diegolamonica.info
                 International Webmasters Association - http://www.iwa.it
Intercettare lo stato DOMReady
Per WebKit prima della versione 525 e Opera 9

function testDOMReady(){
     _testDOMReady = setInterval(function(){
         if ( document.readyState == "loaded" ||




                                                          15
                                         document.readyState == "complete" ) {
              clearInterval( _testDOMReady );
              _testDOMReady = null;
              testDOMReady();
         }
    }, 10);
}




                I linguaggi del Web – Diego La Monica – http://diegolamonica.info
                International Webmasters Association - http://www.iwa.it
Framework
●   Sviluppo rapido
●   Cross-browser
●



●
    Semplificano problemi complessi...
    ...complicano problemi semplici!             16
         I linguaggi del Web – Diego La Monica – http://diegolamonica.info
         International Webmasters Association - http://www.iwa.it
Cosa sono i Framework?
   Sono le fondamenta
 dell’edilizia del software



                                                     17
Lo scopo di un framework è di risparmiare allo
sviluppatore la riscrittura di codice già steso in
precedenza per compiti simili. Questa circostanza si è
presentata sempre più spesso man mano che le
interfacce utente sono diventate sempre più complesse,
o più in generale man mano che è aumentata la quantità
di software con funzionalità secondarie simili.
             I linguaggi del Web – Diego La Monica – http://diegolamonica.info
             International Webmasters Association - http://www.iwa.it
jQuery v 1.5.1
jQuery is a fast and concise JavaScript Library that simplifies HTML
document traversing, event handling, animating, and Ajax interactions
for rapid web development. jQuery is designed to change the
way that you write JavaScript.




                                                     18
Dimensioni:
29Kb Minified + Gzipped (usata in ambienti di produzione)
212Kb Versione non compressa di sviluppo.

                           http://jquery.com

             I linguaggi del Web – Diego La Monica – http://diegolamonica.info
             International Webmasters Association - http://www.iwa.it
MooTools v 1.3.1
MooTools is a compact, modular, Object-Oriented JavaScript
framework designed for the intermediate to advanced JavaScript
developer. It allows you to write powerful, flexible, and cross-browser
code with its elegant, well documented, and coherent API.




                                                     19
Dimensioni:
~25Kb Minified + Gzipped (usata in ambienti di produzione)
142Kb Versione non compressa di sviluppo.

                          http://mootools.net

             I linguaggi del Web – Diego La Monica – http://diegolamonica.info
             International Webmasters Association - http://www.iwa.it
YUI Library v 3
YUI 3 is Yahoo!'s next-generation JavaScript and CSS library. It powers the
new Yahoo! homepage,Yahoo! Mail, and many other Yahoo! sites. The YUI
3 Library has been redesigned and rewritten from the ground up
incorporating what we've learned in five years of dedicated library
development. The library includes the core components, a full suite of




                                                      20
utilities, the Widget Infrastructure, a growing collection of widgets, CSS
resources, and tools.
Dimensioni:
6.9Kb Minified + Gzipped (usata in ambienti di produzione)
7.2Mb Versione non compressa di sviluppo completa di esempi.
                   http://developer.yahoo.com/yui/3/

              I linguaggi del Web – Diego La Monica – http://diegolamonica.info
              International Webmasters Association - http://www.iwa.it
Axs Library
Axs is a small Javascript library which provides methods
which make it easier for web developers to implement
modern Web 2.0 sites with accessible features.




                                                   21
Dimensioni:
24.6Kb
                      http://dev.aol.com/axs




           I linguaggi del Web – Diego La Monica – http://diegolamonica.info
           International Webmasters Association - http://www.iwa.it
JAST
JAST è un Framework Javascript per lo sviluppo agile di
applicazioni e siti web arricchendo la presentazione di
effetti ed aiutando lo sviluppatore nell'arduo compito di
presentare i contenuti allo stesso modo sulle più disparate




                                                   22
piattaforme.

Dimensioni:
29.8Kb
  https://github.com/diegolamonica/ALPHA/tree/master/scripts


           I linguaggi del Web – Diego La Monica – http://diegolamonica.info
           International Webmasters Association - http://www.iwa.it
Richiesta AJAX con MooTools
<script src=/slideshow/i-linguaggi-del-web-seconda-edizione-3-giornata/7390826/"mootools-core-1.3.1-full-compat.js"
    type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
  var result = $('result');        // ottiene un elemento dal DOM con id=result
  var req = new Request({          // Istanzia una nuova richiesta AJAX
    url: '/echo/html/',
    onRequest: function(){         // Definisce il metodo da invocare all'esecuzione




                                                              23
        result.set('text', 'Caricamento in corso...');
    },
    onSuccess: function(txt){      // metodo da invocare con risposta positiva (200)
        result.set('text', txt);
    },
    onFailure: function(){         // Metodo da invocare in caso di errori
        result.set('text', 'La richiesta non ha avuto esito positivo.');
    }
  });
  req.send({url: 'miapagina.php'});       // Effettua la richiesta AJAX
</script>


                  I linguaggi del Web – Diego La Monica – http://diegolamonica.info
                  International Webmasters Association - http://www.iwa.it
Richiesta AJAX con YUI
<script src=/slideshow/i-linguaggi-del-web-seconda-edizione-3-giornata/7390826/"http:/yui.yahooapis.com/3.3.0/build/yui/yui-min.js"
      type="text/javascript" charset="utf-8"></script>


<script type="text/javascript">
YUI().use("io-base", function(Y) {       // richiede l'uso del modulo io-base
      var uri = "miapagina.php";




                                                               24
      function complete(id, o, args) {
           var data = o.responseText; // Response data.
           YUI().one('#mycontents').set('innerHTML', data);
      };


      Y.on('io:complete', complete, Y);      // Associa all'evento io:complete
                                             // l'invocazione del metodo complete


      var request = Y.io(uri);               // Esegue la richiesta
});
</script>


                   I linguaggi del Web – Diego La Monica – http://diegolamonica.info
                   International Webmasters Association - http://www.iwa.it
Richiesta AJAX con jQuery
<script src=/slideshow/i-linguaggi-del-web-seconda-edizione-3-giornata/7390826/"jquery-1.5.1.min.js" type="text/javascript"></script>


<script type="text/javascript">
$.ajax({                          // Effettua una chiamata AJAX
  url: "miapagina.php",
  success: function(data){        // Metodo di callback
      $(this).innerHML = data;




                                                             25
  }
  Context: $('#mycontents'),      // Definisce l'oggetto a cui si riferisce il this
                                  // del metodo success.
});
</script>




                  I linguaggi del Web – Diego La Monica – http://diegolamonica.info
                  International Webmasters Association - http://www.iwa.it
Richiesta AJAX con JAST
<script src=/slideshow/i-linguaggi-del-web-seconda-edizione-3-giornata/7390826/"JAST.src.js" type="text/javascript" charset="utf-8"></script>


<script type="text/javascript">
_.xhttp.get('miapagina.php',           // Effettua una chiamata AJAX
            {
                 param: 'abc'          // Fornendo i seguenti parametri in GET
            },




                                                             26
            function(buffer){          // Funzione di callback
                 _._id('mycontents').innerHTML = buffer;
            }
);
</script>




                   I linguaggi del Web – Diego La Monica – http://diegolamonica.info
                   International Webmasters Association - http://www.iwa.it
Rendere dei link “AJAX” compliant
/* Aggancia la funzione myAjaxFn all'evento click per tutti i link disponibili
nel DOM con classe “ajax” */
var ajaxLinks=document.getElmentsByTagName("a");
var lun=ajaxLinks.length;
for (n=0;n<lun;n++) {
    if (ajaxLinks[n].className.indexOf('ajax')){




                                                       27
        CrossBrowserAttachEventFunction(
            ajaxLinks[n], 'click', myAjaxFn);
    }
}
…
function CrossBrowserAttachEventFunction(node, eventName, theFunction){
    …
}
function myAjaxFn(event){
    …
}


               I linguaggi del Web – Diego La Monica – http://diegolamonica.info
               International Webmasters Association - http://www.iwa.it
Punti deboli
●   link con classe “ajaxes” o contentente il termine “ajax” saranno
    conteggiati.
●   Bisogna scrivere una routine cross-browser per agganciare la funzione




                                                       28
    all'evento ( CrossBrowserAttachEventFunction )
     ●   Alcuni browser supportano il metodo addEventListener

     ●   Altri supportano il metodo attachEvent

     ●   Altri non supportano né l'uno né l'altro

●   Bisogna testare il codice scritto in più browser
               I linguaggi del Web – Diego La Monica – http://diegolamonica.info
               International Webmasters Association - http://www.iwa.it
Rendere dei link AJAX con jQuery
/* Aggancia la funzione myAjaxFn all'evento click per
tutti i link disponibili nel DOM con classe “ajax” */



var ajaxLinks = $('a.ajax');




                                                     29
ajaxLinks.click(myAjaxFn);



function myAjaxFn(){

    …

}

             I linguaggi del Web – Diego La Monica – http://diegolamonica.info
             International Webmasters Association - http://www.iwa.it
Rendere dei link AJAX con JAST
/* Aggancia la funzione myAjaxFn all'evento click per
tutti i link disponibili nel DOM con classe “ajax” */



var ajaxLinks = _._class('ajax', null, 'a');




                                                     30
_.Events.add(ajaxLinks, 'click', myAjaxFn);



function myAjaxFn(){

    …

}

             I linguaggi del Web – Diego La Monica – http://diegolamonica.info
             International Webmasters Association - http://www.iwa.it
Problema: tecnologie assistive
●   Le tecnologie assistive non sono in grado di verificare quello che
    succede nella pagina, perchè per ciascun cambiamento che noi
    percepiamo a video, è cambiato qualcosa nel Document Object




                                                      31
    Model (DOM).
●   Mantenere traccia di tutti i cambiamenti potrebbe portare ad una
    confusione totale delle tecnologie assistive con conseguenze
    caotiche sulle informazioni trasmesse all'utilizzatore.




              I linguaggi del Web – Diego La Monica – http://diegolamonica.info
              International Webmasters Association - http://www.iwa.it
Prendere un po' d'ARIA
Il gruppo di lavoro Protocols & Formats (W3C PFWG),
sta lavorando ad una serie di specifiche con lo scopo di
migliorare l'accessibilità delle applicazioni Web.




                                                   32
  Accessible Rich Internet Applications (WAI-ARIA) 1.0


                                http://www.w3.org/TR/wai-aria/

           I linguaggi del Web – Diego La Monica – http://diegolamonica.info
           International Webmasters Association - http://www.iwa.it
DocType con ARIA
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+ARIA 1.0//EN"

    "http://www.w3.org/WAI/ARIA/schemata/xhtml-aria-1.dtd">

●    Estende la specifica XHTML 1.1 con le nuove caratteristiche di
     WAI-ARIA




                                                      33
●    I documenti che fanno uso della specifica WAI-ARIA, possono
     essere validati utilizzando la seguente DTD
     http://www.w3.org/WAI/ARIA/schemata/xhtml-aria-1.dtd
●    Non tutti i browser supportano però XHTML 1.1 servito come
     Application/XHTML+XML
              I linguaggi del Web – Diego La Monica – http://diegolamonica.info
              International Webmasters Association - http://www.iwa.it
ARIA in sintesi
●   Aggiunge nuove caratteristiche al documento web

●   Rende un'applicazione web “teoricamente” accessibile




                                                    34
●   Descrive meglio ciascun elemento “fondamentale” del

    documento o dell'applicazione

●   Aumenta quindi il valore semantico degli elementi e

    della pagina
            I linguaggi del Web – Diego La Monica – http://diegolamonica.info
            International Webmasters Association - http://www.iwa.it
Alcune caratteristiche di ARIA
●   aria-live (polite, assertive, off)
●   aria-relevant (additions, removals)




                                                   35
●   aria-describedby
●   aria-labelledby

        http://www.w3.org/TR/wai-aria/appendices#quickref

           I linguaggi del Web – Diego La Monica – http://diegolamonica.info
           International Webmasters Association - http://www.iwa.it
L'ARIA giusta per ogni cosa
●   Il menu di un'applicazione può supportare ARIA
●   Una serie di schede organizzate a tab possono supportare
    ARIA




                                                    36
●   Un elemento non di tipo INPUT può diventare una
    checkbox con ARIA
Per ogni soluzione che adotta le specifiche ARIA comunque è
necessario garantire la navigazione da tastiera


            I linguaggi del Web – Diego La Monica – http://diegolamonica.info
            International Webmasters Association - http://www.iwa.it
Strumenti client – Browser
●   Mozilla Firefox

●   Opera




                                                     37
●   Safari

●   Chrome

●   IETester (IE 5.5, IE 6, IE 7, IE 8)

             I linguaggi del Web – Diego La Monica – http://diegolamonica.info
             International Webmasters Association - http://www.iwa.it
Strumenti client (Mozilla Firefox)
●   Firebug: per osservare e apportare cambiamenti al DOM, debug
    di Javascript, monitoraggio del traffico client/server.
●   Headings Map: mostra i livelli di nidificazione degli header in una




                                                      38
    pagina.
●   WCAG Contrast checker: analizzatore del contrasto cromatico
    in conformita con le indicazioni WCAG 1.0 e 2.0
●   Web developer: strumenti di controllo delle applicazioni web.
●   Firevox: Screen reader per Firefox (fino alla versione 2.x di Firefox)
              I linguaggi del Web – Diego La Monica – http://diegolamonica.info
              International Webmasters Association - http://www.iwa.it
Strumenti client (Opera)
●   Dragonfly: editor di debug e monitoraggio

    performance simile a firebug ma molto più




                                                   39
    limitato.




           I linguaggi del Web – Diego La Monica – http://diegolamonica.info
           International Webmasters Association - http://www.iwa.it
Strumenti client (Google Chrome)
●   Firebug: analogo al plugin per Mozilla Firefox con diverse
    limitazioni dipendenti dalle policy di sicurezza di Google
    Chrome.




                                                        40
●   Task Manager: per terminare solo le finestre che diventano
    instabili e monitoraggio delle risorse sfruttate da ciascun
    processo.
●   Strumenti per sviluppatori: per monitorare le performance
    di caricamento
                I linguaggi del Web – Diego La Monica – http://diegolamonica.info
                International Webmasters Association - http://www.iwa.it
Riferimenti e approfondimenti #1
●   Webaccessibile.org
    http://www.webaccessibile.org




                                                  41
●   JSON (JavaScript Object Notation)
    http://json.org
●   AJAX su Wikipedia
    http://it.wikipedia.org/wiki/AJAX
          I linguaggi del Web – Diego La Monica – http://diegolamonica.info
          International Webmasters Association - http://www.iwa.it
Riferimenti e approfondimenti #2
●   Tutti per uno … XMLHttpRequest per tutti!

    http://diegolamonica.info/tutorials/index.php?id=6




                                                    42
●   Accessible Rich Internet Applications (WAI-ARIA)

    Version 1.0 http://www.w3.org/TR/wai-aria/

●   Applicazioni AJAX Accessibili

    http://diegolamonica.info/smau-2008/
            I linguaggi del Web – Diego La Monica – http://diegolamonica.info
            International Webmasters Association - http://www.iwa.it
Riferimenti e approfondimenti #3
●   jQuery http://jquery.com

●   MooTools http://mootools.org




                                                     43
●   YUI Library http://developer.yahoo.com/yui/3/

●   Axs Library http://dev.aol.com/axs

●   JAST http://jastegg.it e

    http://github.com/diegolamonica/ALPHA/master/tree/scripts/

             I linguaggi del Web – Diego La Monica – http://diegolamonica.info
             International Webmasters Association - http://www.iwa.it
I linguaggi del Web – 2ª Ed. (3° Giorno)

 Diego La Monica – Web Solution Developer
 Email:       me@diegolamonica.info
 Web:         http://diegolamonica.info
 Twitter:     http://twitter.com/jast/
 ݺߣ Share: http://slideshare.net/diego.la.monica/
 Skype:       diego.la.monica
 Mobile:      +39 333 7235382

More Related Content

I linguaggi del web - seconda edizione (3° giornata)

  • 1. I linguaggi del Web – 2ª Ed. (3° Giorno) Diego La Monica – Web Solution Developer Email: me@diegolamonica.info Web: http://diegolamonica.info Twitter: http://twitter.com/jast/ ݺߣ Share: http://slideshare.net/diego.la.monica/ Skype: diego.la.monica Mobile: +39 333 7235382
  • 2. Chi sono? ● Web solution developer ● Membro di IWA/HWG ● Membro del Consiglio Direttivo di IWA Italy da Febbraio 2009 2 ● Membro del Gruppo di Lavoro Protocols & Format istituito dal W3C per conto di IWA/HWG ● Autore del tool “Wi.Li.” http://wili.diegolamonica.info ● Autore del framework JavaScript “JAST” http://jastegg.it ● Autore del framework PHP “ALPHA” http://github.com/diegolamonica/ALPHA/ I linguaggi del Web – Diego La Monica – http://diegolamonica.info International Webmasters Association - http://www.iwa.it
  • 3. Il programma della giornata Modulo 4 – AJAX  Interazioni client/server 3  Framework a confronto: ● Framework jQuery ● Mootools ● YUI ● JAST I linguaggi del Web – Diego La Monica – http://diegolamonica.info International Webmasters Association - http://www.iwa.it
  • 4. Il programma della giornata Modulo 5 – ARIA e l’accessibilità lato client 4  Prendere un po' di ARIA  Le tecnologie assistive  Ruoli, stati e proprietà  Strumenti per lo sviluppo accessibile I linguaggi del Web – Diego La Monica – http://diegolamonica.info International Webmasters Association - http://www.iwa.it
  • 5. Nota sulla slide Nell'angolo inferiore destro di alcune slide è presente un “pallino” come è visibile in 5 questa slide. Esso indica che per la slide è prevista una sessione pratica. I linguaggi del Web – Diego La Monica – http://diegolamonica.info International Webmasters Association - http://www.iwa.it
  • 6. Modulo 4 - AJAX I linguaggi del Web – Diego La Monica – http://diegolamonica.info International Webmasters Association - http://www.iwa.it
  • 7. Cos'è AJAX AJAX, acronimo di Asynchronous JavaScript and XML, è una tecnica di sviluppo web per creare applicazioni web interattive. L'intento di tale tecnica è quello di ottenere 7 pagine web che rispondono in maniera più rapida, grazie allo scambio in background di piccoli pacchetti di dati con il server, così che l'intera pagina web non debba essere ricaricata ogni volta che l'utente effettua una modifica. (Wikipedia: AJAX) I linguaggi del Web – Diego La Monica – http://diegolamonica.info International Webmasters Association - http://www.iwa.it
  • 8. Cosa si intende per AJAX? Col tempo AJAX ha assunto un significato (impropriamente) più esteso: è AJAX tutto ciò che modifica il DOM. 8 ● Caricamento di frammenti di pagina ● Animazione di oggetti sulla pagina ● Applicazione e modifica dello stile degli elementi sul documento I linguaggi del Web – Diego La Monica – http://diegolamonica.info International Webmasters Association - http://www.iwa.it
  • 9. XMLHttpRequest alla base di tutto function crea_XMLHttpRequest(){ var obj = null; if(typeof(XMLHttpRequest) === "function" || typeof(XMLHttpRequest) === "object"){ obj = new XMLHttpRequest(); } else if (window.ActiveXObject) { obj = createFromActiveX(); } return obj; } function createFromActiveX() { } var aVersions = [ "MSXML2.XMLHttp.5.0", "MSXML2.XMLHttp.4.0", } var oXmlHttp = new ActiveXObject(aVersions[i]); return oXmlHttp; } catch (oError) { /* Do nothing */ } return null; 9 "MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp","Microsoft.XMLHttp" ]; for (var i = 0; i < aVersions.length; i++) { try { I linguaggi del Web – Diego La Monica – http://diegolamonica.info International Webmasters Association - http://www.iwa.it
  • 10. AJAX Graceful Degradation ● L'esecuzione dello script avviene regolarmente ● Se il set di istruzioni Javascript non è completamente 10 implementato (Es. su dispositivi mobili di vecchia generazione o su browser testuali) esegue operazioni non basate su Javascript (eseguendo per ogni azione il reload completo della pagina) (Graceful Degradation) I linguaggi del Web – Diego La Monica – http://diegolamonica.info International Webmasters Association - http://www.iwa.it
  • 11. Progressive Enhancement AJAX ● Tutte le funzioni sono implementate senza necessità di Javascript Quando tutti i nodi del DOM sono disponibili 11 ● si esegue un metodo che andrà ad alterare i nodi del DOM integrandoli con altri nodi, definendo nuove caratteristiche o inserendo degli script JavaScript. document.getElementById('myLink').onclick='…'; I linguaggi del Web – Diego La Monica – http://diegolamonica.info International Webmasters Association - http://www.iwa.it
  • 12. Intercettare il DOM Ready ● Evento Load viene scatenato dopo che sono stati caricati tutti i contenuti degli elementi sul documento (img, object, javascript, stili)… Troppo tardi! 12 ● Evento DOM Ready viene scatenato quando la pagina HTML è stata caricata anche se i contenuti (css, javascript, immagini … ) non sono ancora disponibili. I linguaggi del Web – Diego La Monica – http://diegolamonica.info International Webmasters Association - http://www.iwa.it
  • 13. Intercettare lo stato DOMReady Per Firefox, Opera 8.x (o precedenti), Internet Explorer 9 e Webkit (dalla versione 525): document.addEventListener(document, "DOMContentLoaded", metodoDiStartup); 13 Modalità conforme alle specifiche delW3C I linguaggi del Web – Diego La Monica – http://diegolamonica.info International Webmasters Association - http://www.iwa.it
  • 14. Intercettare lo stato DOMReady Per Internet Explorer: document.write("<scr" + "ipt id=__ie_init defer=defer " + "src=/slideshow/i-linguaggi-del-web-seconda-edizione-3-giornata/7390826/"/:"></script>"); 14 var script = document.getElementById("__ie_init"); if ( script ) script.onreadystatechange = function() { if ( this.readyState != "complete" ) return; metodoDiStartup(); }; script = null; I linguaggi del Web – Diego La Monica – http://diegolamonica.info International Webmasters Association - http://www.iwa.it
  • 15. Intercettare lo stato DOMReady Per WebKit prima della versione 525 e Opera 9 function testDOMReady(){ _testDOMReady = setInterval(function(){ if ( document.readyState == "loaded" || 15 document.readyState == "complete" ) { clearInterval( _testDOMReady ); _testDOMReady = null; testDOMReady(); } }, 10); } I linguaggi del Web – Diego La Monica – http://diegolamonica.info International Webmasters Association - http://www.iwa.it
  • 16. Framework ● Sviluppo rapido ● Cross-browser ● ● Semplificano problemi complessi... ...complicano problemi semplici! 16 I linguaggi del Web – Diego La Monica – http://diegolamonica.info International Webmasters Association - http://www.iwa.it
  • 17. Cosa sono i Framework? Sono le fondamenta dell’edilizia del software 17 Lo scopo di un framework è di risparmiare allo sviluppatore la riscrittura di codice già steso in precedenza per compiti simili. Questa circostanza si è presentata sempre più spesso man mano che le interfacce utente sono diventate sempre più complesse, o più in generale man mano che è aumentata la quantità di software con funzionalità secondarie simili. I linguaggi del Web – Diego La Monica – http://diegolamonica.info International Webmasters Association - http://www.iwa.it
  • 18. jQuery v 1.5.1 jQuery is a fast and concise JavaScript Library that simplifies HTML document traversing, event handling, animating, and Ajax interactions for rapid web development. jQuery is designed to change the way that you write JavaScript. 18 Dimensioni: 29Kb Minified + Gzipped (usata in ambienti di produzione) 212Kb Versione non compressa di sviluppo. http://jquery.com I linguaggi del Web – Diego La Monica – http://diegolamonica.info International Webmasters Association - http://www.iwa.it
  • 19. MooTools v 1.3.1 MooTools is a compact, modular, Object-Oriented JavaScript framework designed for the intermediate to advanced JavaScript developer. It allows you to write powerful, flexible, and cross-browser code with its elegant, well documented, and coherent API. 19 Dimensioni: ~25Kb Minified + Gzipped (usata in ambienti di produzione) 142Kb Versione non compressa di sviluppo. http://mootools.net I linguaggi del Web – Diego La Monica – http://diegolamonica.info International Webmasters Association - http://www.iwa.it
  • 20. YUI Library v 3 YUI 3 is Yahoo!'s next-generation JavaScript and CSS library. It powers the new Yahoo! homepage,Yahoo! Mail, and many other Yahoo! sites. The YUI 3 Library has been redesigned and rewritten from the ground up incorporating what we've learned in five years of dedicated library development. The library includes the core components, a full suite of 20 utilities, the Widget Infrastructure, a growing collection of widgets, CSS resources, and tools. Dimensioni: 6.9Kb Minified + Gzipped (usata in ambienti di produzione) 7.2Mb Versione non compressa di sviluppo completa di esempi. http://developer.yahoo.com/yui/3/ I linguaggi del Web – Diego La Monica – http://diegolamonica.info International Webmasters Association - http://www.iwa.it
  • 21. Axs Library Axs is a small Javascript library which provides methods which make it easier for web developers to implement modern Web 2.0 sites with accessible features. 21 Dimensioni: 24.6Kb http://dev.aol.com/axs I linguaggi del Web – Diego La Monica – http://diegolamonica.info International Webmasters Association - http://www.iwa.it
  • 22. JAST JAST è un Framework Javascript per lo sviluppo agile di applicazioni e siti web arricchendo la presentazione di effetti ed aiutando lo sviluppatore nell'arduo compito di presentare i contenuti allo stesso modo sulle più disparate 22 piattaforme. Dimensioni: 29.8Kb https://github.com/diegolamonica/ALPHA/tree/master/scripts I linguaggi del Web – Diego La Monica – http://diegolamonica.info International Webmasters Association - http://www.iwa.it
  • 23. Richiesta AJAX con MooTools <script src=/slideshow/i-linguaggi-del-web-seconda-edizione-3-giornata/7390826/"mootools-core-1.3.1-full-compat.js" type="text/javascript" charset="utf-8"></script> <script type="text/javascript"> var result = $('result'); // ottiene un elemento dal DOM con id=result var req = new Request({ // Istanzia una nuova richiesta AJAX url: '/echo/html/', onRequest: function(){ // Definisce il metodo da invocare all'esecuzione 23 result.set('text', 'Caricamento in corso...'); }, onSuccess: function(txt){ // metodo da invocare con risposta positiva (200) result.set('text', txt); }, onFailure: function(){ // Metodo da invocare in caso di errori result.set('text', 'La richiesta non ha avuto esito positivo.'); } }); req.send({url: 'miapagina.php'}); // Effettua la richiesta AJAX </script> I linguaggi del Web – Diego La Monica – http://diegolamonica.info International Webmasters Association - http://www.iwa.it
  • 24. Richiesta AJAX con YUI <script src=/slideshow/i-linguaggi-del-web-seconda-edizione-3-giornata/7390826/"http:/yui.yahooapis.com/3.3.0/build/yui/yui-min.js" type="text/javascript" charset="utf-8"></script> <script type="text/javascript"> YUI().use("io-base", function(Y) { // richiede l'uso del modulo io-base var uri = "miapagina.php"; 24 function complete(id, o, args) { var data = o.responseText; // Response data. YUI().one('#mycontents').set('innerHTML', data); }; Y.on('io:complete', complete, Y); // Associa all'evento io:complete // l'invocazione del metodo complete var request = Y.io(uri); // Esegue la richiesta }); </script> I linguaggi del Web – Diego La Monica – http://diegolamonica.info International Webmasters Association - http://www.iwa.it
  • 25. Richiesta AJAX con jQuery <script src=/slideshow/i-linguaggi-del-web-seconda-edizione-3-giornata/7390826/"jquery-1.5.1.min.js" type="text/javascript"></script> <script type="text/javascript"> $.ajax({ // Effettua una chiamata AJAX url: "miapagina.php", success: function(data){ // Metodo di callback $(this).innerHML = data; 25 } Context: $('#mycontents'), // Definisce l'oggetto a cui si riferisce il this // del metodo success. }); </script> I linguaggi del Web – Diego La Monica – http://diegolamonica.info International Webmasters Association - http://www.iwa.it
  • 26. Richiesta AJAX con JAST <script src=/slideshow/i-linguaggi-del-web-seconda-edizione-3-giornata/7390826/"JAST.src.js" type="text/javascript" charset="utf-8"></script> <script type="text/javascript"> _.xhttp.get('miapagina.php', // Effettua una chiamata AJAX { param: 'abc' // Fornendo i seguenti parametri in GET }, 26 function(buffer){ // Funzione di callback _._id('mycontents').innerHTML = buffer; } ); </script> I linguaggi del Web – Diego La Monica – http://diegolamonica.info International Webmasters Association - http://www.iwa.it
  • 27. Rendere dei link “AJAX” compliant /* Aggancia la funzione myAjaxFn all'evento click per tutti i link disponibili nel DOM con classe “ajax” */ var ajaxLinks=document.getElmentsByTagName("a"); var lun=ajaxLinks.length; for (n=0;n<lun;n++) { if (ajaxLinks[n].className.indexOf('ajax')){ 27 CrossBrowserAttachEventFunction( ajaxLinks[n], 'click', myAjaxFn); } } … function CrossBrowserAttachEventFunction(node, eventName, theFunction){ … } function myAjaxFn(event){ … } I linguaggi del Web – Diego La Monica – http://diegolamonica.info International Webmasters Association - http://www.iwa.it
  • 28. Punti deboli ● link con classe “ajaxes” o contentente il termine “ajax” saranno conteggiati. ● Bisogna scrivere una routine cross-browser per agganciare la funzione 28 all'evento ( CrossBrowserAttachEventFunction ) ● Alcuni browser supportano il metodo addEventListener ● Altri supportano il metodo attachEvent ● Altri non supportano né l'uno né l'altro ● Bisogna testare il codice scritto in più browser I linguaggi del Web – Diego La Monica – http://diegolamonica.info International Webmasters Association - http://www.iwa.it
  • 29. Rendere dei link AJAX con jQuery /* Aggancia la funzione myAjaxFn all'evento click per tutti i link disponibili nel DOM con classe “ajax” */ var ajaxLinks = $('a.ajax'); 29 ajaxLinks.click(myAjaxFn); function myAjaxFn(){ … } I linguaggi del Web – Diego La Monica – http://diegolamonica.info International Webmasters Association - http://www.iwa.it
  • 30. Rendere dei link AJAX con JAST /* Aggancia la funzione myAjaxFn all'evento click per tutti i link disponibili nel DOM con classe “ajax” */ var ajaxLinks = _._class('ajax', null, 'a'); 30 _.Events.add(ajaxLinks, 'click', myAjaxFn); function myAjaxFn(){ … } I linguaggi del Web – Diego La Monica – http://diegolamonica.info International Webmasters Association - http://www.iwa.it
  • 31. Problema: tecnologie assistive ● Le tecnologie assistive non sono in grado di verificare quello che succede nella pagina, perchè per ciascun cambiamento che noi percepiamo a video, è cambiato qualcosa nel Document Object 31 Model (DOM). ● Mantenere traccia di tutti i cambiamenti potrebbe portare ad una confusione totale delle tecnologie assistive con conseguenze caotiche sulle informazioni trasmesse all'utilizzatore. I linguaggi del Web – Diego La Monica – http://diegolamonica.info International Webmasters Association - http://www.iwa.it
  • 32. Prendere un po' d'ARIA Il gruppo di lavoro Protocols & Formats (W3C PFWG), sta lavorando ad una serie di specifiche con lo scopo di migliorare l'accessibilità delle applicazioni Web. 32 Accessible Rich Internet Applications (WAI-ARIA) 1.0 http://www.w3.org/TR/wai-aria/ I linguaggi del Web – Diego La Monica – http://diegolamonica.info International Webmasters Association - http://www.iwa.it
  • 33. DocType con ARIA <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+ARIA 1.0//EN" "http://www.w3.org/WAI/ARIA/schemata/xhtml-aria-1.dtd"> ● Estende la specifica XHTML 1.1 con le nuove caratteristiche di WAI-ARIA 33 ● I documenti che fanno uso della specifica WAI-ARIA, possono essere validati utilizzando la seguente DTD http://www.w3.org/WAI/ARIA/schemata/xhtml-aria-1.dtd ● Non tutti i browser supportano però XHTML 1.1 servito come Application/XHTML+XML I linguaggi del Web – Diego La Monica – http://diegolamonica.info International Webmasters Association - http://www.iwa.it
  • 34. ARIA in sintesi ● Aggiunge nuove caratteristiche al documento web ● Rende un'applicazione web “teoricamente” accessibile 34 ● Descrive meglio ciascun elemento “fondamentale” del documento o dell'applicazione ● Aumenta quindi il valore semantico degli elementi e della pagina I linguaggi del Web – Diego La Monica – http://diegolamonica.info International Webmasters Association - http://www.iwa.it
  • 35. Alcune caratteristiche di ARIA ● aria-live (polite, assertive, off) ● aria-relevant (additions, removals) 35 ● aria-describedby ● aria-labelledby http://www.w3.org/TR/wai-aria/appendices#quickref I linguaggi del Web – Diego La Monica – http://diegolamonica.info International Webmasters Association - http://www.iwa.it
  • 36. L'ARIA giusta per ogni cosa ● Il menu di un'applicazione può supportare ARIA ● Una serie di schede organizzate a tab possono supportare ARIA 36 ● Un elemento non di tipo INPUT può diventare una checkbox con ARIA Per ogni soluzione che adotta le specifiche ARIA comunque è necessario garantire la navigazione da tastiera I linguaggi del Web – Diego La Monica – http://diegolamonica.info International Webmasters Association - http://www.iwa.it
  • 37. Strumenti client – Browser ● Mozilla Firefox ● Opera 37 ● Safari ● Chrome ● IETester (IE 5.5, IE 6, IE 7, IE 8) I linguaggi del Web – Diego La Monica – http://diegolamonica.info International Webmasters Association - http://www.iwa.it
  • 38. Strumenti client (Mozilla Firefox) ● Firebug: per osservare e apportare cambiamenti al DOM, debug di Javascript, monitoraggio del traffico client/server. ● Headings Map: mostra i livelli di nidificazione degli header in una 38 pagina. ● WCAG Contrast checker: analizzatore del contrasto cromatico in conformita con le indicazioni WCAG 1.0 e 2.0 ● Web developer: strumenti di controllo delle applicazioni web. ● Firevox: Screen reader per Firefox (fino alla versione 2.x di Firefox) I linguaggi del Web – Diego La Monica – http://diegolamonica.info International Webmasters Association - http://www.iwa.it
  • 39. Strumenti client (Opera) ● Dragonfly: editor di debug e monitoraggio performance simile a firebug ma molto più 39 limitato. I linguaggi del Web – Diego La Monica – http://diegolamonica.info International Webmasters Association - http://www.iwa.it
  • 40. Strumenti client (Google Chrome) ● Firebug: analogo al plugin per Mozilla Firefox con diverse limitazioni dipendenti dalle policy di sicurezza di Google Chrome. 40 ● Task Manager: per terminare solo le finestre che diventano instabili e monitoraggio delle risorse sfruttate da ciascun processo. ● Strumenti per sviluppatori: per monitorare le performance di caricamento I linguaggi del Web – Diego La Monica – http://diegolamonica.info International Webmasters Association - http://www.iwa.it
  • 41. Riferimenti e approfondimenti #1 ● Webaccessibile.org http://www.webaccessibile.org 41 ● JSON (JavaScript Object Notation) http://json.org ● AJAX su Wikipedia http://it.wikipedia.org/wiki/AJAX I linguaggi del Web – Diego La Monica – http://diegolamonica.info International Webmasters Association - http://www.iwa.it
  • 42. Riferimenti e approfondimenti #2 ● Tutti per uno … XMLHttpRequest per tutti! http://diegolamonica.info/tutorials/index.php?id=6 42 ● Accessible Rich Internet Applications (WAI-ARIA) Version 1.0 http://www.w3.org/TR/wai-aria/ ● Applicazioni AJAX Accessibili http://diegolamonica.info/smau-2008/ I linguaggi del Web – Diego La Monica – http://diegolamonica.info International Webmasters Association - http://www.iwa.it
  • 43. Riferimenti e approfondimenti #3 ● jQuery http://jquery.com ● MooTools http://mootools.org 43 ● YUI Library http://developer.yahoo.com/yui/3/ ● Axs Library http://dev.aol.com/axs ● JAST http://jastegg.it e http://github.com/diegolamonica/ALPHA/master/tree/scripts/ I linguaggi del Web – Diego La Monica – http://diegolamonica.info International Webmasters Association - http://www.iwa.it
  • 44. I linguaggi del Web – 2ª Ed. (3° Giorno) Diego La Monica – Web Solution Developer Email: me@diegolamonica.info Web: http://diegolamonica.info Twitter: http://twitter.com/jast/ ݺߣ Share: http://slideshare.net/diego.la.monica/ Skype: diego.la.monica Mobile: +39 333 7235382