際際滷

際際滷Share a Scribd company logo
Sviluppare plugin
       per
 Google Chrome

           Marco Vito Moscaritolo  marco@agavee.com  agavee
Marco Vito Moscaritolo (aka mavimo)


Sviluppatore web specializzato in Drupal              Contatti:
(per chi non lo conoscesse:            )                    @mavimo
con particolare interessa verso le nuove                    marco@agavee.com
tecnologie, sopratutto nel settore mobile.                  http://mavimo.org
Attualmente lavora come freelance ed                        http://agavee.com
all'interno del team agavee


                                                           Marco Vito Moscaritolo  marco@agavee.com  agavee
Cosa andiamo a vedere?
   Perch辿 sviluppare estensioni per browser                                       ...perch辿 proprio per Google Chrome?

   Che tipologie di estesioni possiamo realizzare                                        quanta scelta... forse troppa?

   La struttura di base di un estensione                                                     ...basta veramente poco!

   Le funzionalit implementate (API)      ...o meglio, quelle gi implementa in da altri in modo da lavorare meno noi!

   Gli strumenti di debug                                   ...non siamo perfetti, potremmo fare pure qualche errore?

   Il deploy dell'applicazione                                                          ....da Google o sul nostro sito?

   Varie ed eventuali                                                                           ...sempre da mettere!


                                                                          Marco Vito Moscaritolo  marco@agavee.com  agavee
Vantaggi nello sviluppare estensioni per browser?
   100% dei PC usati come client hanno un browser (o possono averlo)
   Quasi tutti i browser supportano plugin (IE9, FF3/4, Google Chrome, Opera, ...)
   Possibilit di usare linguaggi molto conosciuti (javascript, HTML, XML/XUL )
   Possibilit di lavorare in ambienti blindati (non serve cross-compatibilit)
   Possibilit di superare alcuni limiti di javascript con le API interne (browser-
    specifiche)


                                                             Marco Vito Moscaritolo  marco@agavee.com  agavee
Diffusione dei browser (mondo)                                                         http://gs.statcounter.com/

60




50




40




30




20




10




 0
2010-01   2010-02   2010-03   2010-04   2010-05   2010-06   2010-07   2010-08   2010-09   2010-10      2010-11    2010-12    2011-01




                                                                                                    Marco Vito Moscaritolo  marco@agavee.com  agavee
Diffusione dei browser (Europa)                                                        http://gs.statcounter.com/

50



45



40



35



30



25



20



15



10



 5



 0
2010-01   2010-02   2010-03   2010-04   2010-05   2010-06   2010-07   2010-08   2010-09   2010-10      2010-11    2010-12    2011-01




                                                                                                    Marco Vito Moscaritolo  marco@agavee.com  agavee
Diffusione dei browser (Italia)                                                        http://gs.statcounter.com/


60




50




40




30




20




10




 0
2010-01   2010-02   2010-03   2010-04   2010-05   2010-06   2010-07   2010-08   2010-09   2010-10   2010-11   2010-12    2011-01




                                                                                                Marco Vito Moscaritolo  marco@agavee.com  agavee
Tipologie di estesioni

                            locali...                                          ...remote
   Rapide nell'esecuzione                             Maggior controllo
    il carico 竪 sulla macchina                          infrastruttura ben definita, possibile usare software esterni

   Disponibilit off-line                             Codice lato server
    Utilizzo in mobilit                                il codice non viene distribuito nell'applicazione

   Utilizzo all'interno di altri siti                 Facilit di analisi dei problemi
                                                        non devo basarmi SOLO sui feedback degli utenti
   Possono compiere operazioni in
    background

                                                                             Marco Vito Moscaritolo  marco@agavee.com  agavee
Le tre tipologie principali

Le modalit di esecuzione:
   Nelle tabs
    L'applicazione 竪 una pagina visibile nel browser

   In pop-up
    L'applicazione gira nel popup

   Nelle pagine
    L'applicazione gira in pagine web di sito (anche non nostro)

   In background                                                                          Script
    L'applicazione gira in maniera silente per l'utente


                                                                   Marco Vito Moscaritolo  marco@agavee.com  agavee
Ok, ma come sono fatte?

   Javascript
    ormai 竪 ovunque ed iniziamo ad usarlo abbastanza (anche
    grazie ai framework che sono nati)

   HTML con un buon supporto alle
    funzionalit HTML5
    275 punti su 400 secondo http://beta.html5test.com/
                                                                                                 !
    Flash / Java / C / C++ / .NET / ...                                                       pe
                                                                                            hy



                                                                                ol o
       (embedded)                (NPAPI)
                                                                              s
                                                                        竪
                                                              Non
                                                               Marco Vito Moscaritolo  marco@agavee.com  agavee
Struttura di base
   File di dichiarazione del plugin (manifest.json)
    un banalissimo file JSON



   Cartella di localizzazione (_locales) con sotto
    cartelle per ogni lingua
    lingue secondo le regole IETF language tags



   File HTML, JS, CSS ed immagini a piacere per
    condire il tutto
    alcuni file hanno nomi secondo convenzioni
                                                       Marco Vito Moscaritolo  marco@agavee.com  agavee
manifest.json
{
    "name": "Codemotion",
    "version": "1.0",
    "description": "let's code an innovation world 速",
    "icons": {
       "48": "imgs/icon48.png",
                                                         Informazioni di base dell'estensione
       "64": "imgs/icon64.png"
    },
    "default_locale": "en_US",
    "browser_action": {
                                                         Localizzazione
       "default_title": "__MSG_app_title__",

    },
       "default_icon": "imgs/icon48.png",
       "popup": "generator.html"                         Interazione con il browser
    "options_page": "options.html",
    "permissions": [
                                                         Pagina di setup
       "tabs",

    ],
       "notifications",
       "http://www.codemotion.it/*"                      Permessi
}
    "homepage_url": "http://www.codemotion.it/"
                                                         Altre informazioni
                                                                 Marco Vito Moscaritolo  marco@agavee.com  agavee
Localizzazione
   Il codice si trova in file isolati
    ad esempio _locales/IT/messages.json

   Utilizzo di JSON come formato per il file delle traduzioni
   Possibilit di usare placeholder per i testi
       'app_title': {
         'message'      : 'Ciao $nome$',
         'placeholders' : {'nome' : { 'content' : '$1' }
       }

   Possilibit di usare le API per accedere alle traduzioni
       var msg = chrome.i18n.getMessage('welcome', ['Marco']);
       document.getElementById('user_msg').innerHTML = msg;



                                                               Marco Vito Moscaritolo  marco@agavee.com  agavee
Pagina delle opzioni
   Definibile nel manifest.json
   Accessibile dal menu dell'estensione
   Possibilit di usare le funzionalit di HTML5 per
    salvare le informazioni all'interno del browser
    (localstorage, Local DB, )
    var username = localStorage['auth_user'];
    var token    = localStorage['auth_token'];




                                                        Marco Vito Moscaritolo  marco@agavee.com  agavee
Gestione dei permessi
   Fornisce accesso alle singole funzionalit (API specifiche), che esulano dai
    permessi specifici delle pagine web, ad esempio:
             Gestione delle tabs
             Storage locale illimitato
             Accesso alla cronologia
             Notifiche al sistema
             

   Permessi per chiamate XHR con autorizzazione sul dominio, anche attraverso
    l'utilizzo di pattern:
             http://*.codemotion.it/ws/*
             https://auth.codemotion.it/ws/*

                                                           Marco Vito Moscaritolo  marco@agavee.com  agavee
Estensioni locali (popup)
   Dichiarazione inserita all'interno di manifest.json
    elemento che deve essere caricato ed eseguito nel popup:
        'browser_action': {
            'popup': 'generator.html'
        }

   Popup gestibili a runtime (aggiunta, rimozione, settaggi, )
   Possibilit di modificare a runtime il comportamento della visualizzazione
    ad esempio la modifica dell'aspetto dell'icona:
        chrome.browserAction.setBadgeBackgroundColor({
           color: [208, 0, 24, 255]
        });
        chrome.browserAction.setIcon({
           path: 'operation_end.png'
        });


                                                               Marco Vito Moscaritolo  marco@agavee.com  agavee
Estensioni locali (tabs)
   Dichiarazione inserita all'interno di manifest.json
    elemento che deve essere caricato ed eseguito nel popup:
        'app': {
            'launch': {
     1      }
                'local_path': 'main.html'


             'urls': [
                '*://*.codemotion.it/app/*'
             ],
     2       'launch': {
                'web_url': 'http://www.codemotion.it/app/start.html'
             },
         }

   L'applicazione pu嘆 essere locale (1) o remota (2)

                                                               Marco Vito Moscaritolo  marco@agavee.com  agavee
Estensioni locali (background)
   Dichiarazione inserita all'interno di manifest.json
      'background_page': 'background.html',

   Architettura basata su messaggi o connessioni persistenti tra pagina di
    background e altri elementi (popup, tabs, servizi remoti, altre pagine )




                                                           Marco Vito Moscaritolo  marco@agavee.com  agavee
Estensioni locali (content script)
   Dichiarazione inserita all'interno di manifest.json
      'content_scripts': [
         {
           "matches": ["http://www.codemotion.it/*"],
           "css":     ["css/mystyles.css"],
           "js":      ["js/myscript.js"]
         }
      ],

   Permette di inserire codice (anche programmaticamente) all'interno di pagine
    web a cui non si ha direttamente accesso, per integrarne funzionalit o
    modificarne il comportamento


                                                          Marco Vito Moscaritolo  marco@agavee.com  agavee
Estensioni locali (native)
   Dichiarazione inserita all'interno del manifest.json:
      'plugins': [
         { "path": "plugins/codemotion.dll" },
         { "path": "plugins/codemotion.so" },
         { "path": "plugins/codemotion_64.so" }
      ],

   Permette di inserire codice scritto in C / C++ secondo le specifiche NPAPI che
    pu嘆 essere richiamato in javascript:
      <embed type="application/x-codemotion" id="codemotion">
      <script>
        var CMP = document.getElementById("codemotion");
        var res = CMP.getTalks();
        document.getElementById('talk_list').innerHTML = res;
      </script>



                                                            Marco Vito Moscaritolo  marco@agavee.com  agavee
L'approccio... ...竪 javascript!
   Gestione asincrona delle chiamate
   Gestione ad eventi
    come per il DOM delle pagine nell'approccio classico javascript
     chrome.tabs.onCreated.addListener(
        function(Tab tab) {
          console.log(Aperta tab:  + tab.url);
        }
     );
     chrome.history.onVisited.addListener(
        function(HistoryItem result) {
          alert(result.visitCount);
        }
     );




                                                                      Marco Vito Moscaritolo  marco@agavee.com  agavee
Che API fornisce?

   chrome.bookmarks.*                         chrome.idle.*
   chrome.browserAction.*                     chrome.management.*
   chrome.contextMenus.*                      chrome.omnibox.*
   chrome.cookies.*                           chrome.pageAction.*
   chrome.extension.*                         chrome.tabs.*
   chrome.history.*                           chrome.windows.*
   chrome.i18n.*

                              ...possono bastare, ma...

                                                           Marco Vito Moscaritolo  marco@agavee.com  agavee
...stanno arrivando anche...
   chrome.experimental.clipboard.*
   chrome.experimental.infobars.*
   chrome.experimental.processes.*
   chrome.experimental.proxy.*
   chrome.experimental.sidebar.*
   chrome.experimental.webNavigation.*
   chrome.experimental.webRequest.*

                     ...che sono sperimentali, ma utilizzabili!
                             (NB: richiedono il permesso experimental)

                                                                           Marco Vito Moscaritolo  marco@agavee.com  agavee
Gli strumenti di debug
   Sono gli stessi forniti per l'analisi
    delle pagine web standard
    alla fine si tratta proprio di CSS e Javascript

   Content inspector per il codice
    HTML/CSS
    con possibilit i modificarlo al volo (a la firebug)

   Possibilit di inserire brackpoint
    all'interno di codice javascript
    ed anche brackpoint condizionali, watcher di
    espressioni, analisi delle variabili nello scope


                                                           Marco Vito Moscaritolo  marco@agavee.com  agavee
Il deploy dell'applicazione
   Build automatico da parte del sistema di         Distribuzione ad uso interno senza




                          Google
    pubblicazione                                     rendere l'estensione pubblica (web
                                                      application ad uso aziendale, intranet)
   Possibilit di avere utenti beta-tester
                                                     Pacchettizzazione da effettuare
   Sistema di distribuzione (e visibilit) pi湛
                                                      manualmente (lanciare un comando
    ampio
                                                      passando i dati di firma e
   Possibilit di usare il sistema di vendita        pacchettizzazione corretti)
    di Google                                        Generazione del sistema di notifica degli
   Sistemi automatici di aggiornamento e             aggiornamenti in maniera manuale (un
    versioning delle applicazioni                     file XML)

                                                                   Marco Vito Moscaritolo  marco@agavee.com  agavee
Varie ed eventuali




 tutto oro quello che luccica?
    ...l'esperienza ci insegna, da qualche parte deve esserci la fregatura (o forse no?) :)




                                                                           Marco Vito Moscaritolo  marco@agavee.com  agavee
Domande?
                   'attenz ione!
     Grazi e per l
             Marco Vito Moscaritolo  marco@agavee.com  agavee
Reference
Documentazione ufficiale:
   http://code.google.com/chrome/extensions/
Developer dashboard:
   https://chrome.google.com/webstore/developer/dashboard
Presentazioni disponibili:
   http://www.slideshare.net/mihaiionescu/google-chrome-extensions-devfest09
   http://www.slideshare.net/taobaoued/chrome-extension-develop-starts
Legalese:
   https://chrome.google.com/extensions/intl/en/program_policies.html
   https://chrome.google.com/extensions/intl/en/dev_tos_text.html



                                                                                Marco Vito Moscaritolo  marco@agavee.com  agavee

More Related Content

Similar to Sviluppare plugin per google Chrome (20)

Augmented Reality: guardare il mondo da un altro punto di vista
Augmented Reality: guardare il mondo da un altro punto di vistaAugmented Reality: guardare il mondo da un altro punto di vista
Augmented Reality: guardare il mondo da un altro punto di vista
Codemotion
Google Chrome & Mozilla Firefox - Plugins & Extensions
Google Chrome & Mozilla Firefox - Plugins & ExtensionsGoogle Chrome & Mozilla Firefox - Plugins & Extensions
Google Chrome & Mozilla Firefox - Plugins & Extensions
Valeria Gennari
... thinking about Microformats!
... thinking about Microformats!... thinking about Microformats!
... thinking about Microformats!
Stefano Fago
follow-ap DAY 4: HTML5 e jQuery
follow-ap DAY 4: HTML5 e jQueryfollow-ap DAY 4: HTML5 e jQuery
follow-ap DAY 4: HTML5 e jQuery
QIRIS
Interazione multimodale su Mobile: interazione vocale, touch e grafica su div...
Interazione multimodale su Mobile: interazione vocale, touch e grafica su div...Interazione multimodale su Mobile: interazione vocale, touch e grafica su div...
Interazione multimodale su Mobile: interazione vocale, touch e grafica su div...
IWA
WordCamp Catania 2019 PWA e TWA
WordCamp Catania 2019 PWA e TWAWordCamp Catania 2019 PWA e TWA
WordCamp Catania 2019 PWA e TWA
FrancescoGiammanco1
Google Chrome Extensions & Plugin vs Firefox
Google Chrome Extensions & Plugin vs FirefoxGoogle Chrome Extensions & Plugin vs Firefox
Google Chrome Extensions & Plugin vs Firefox
WikiCorsoWeb
curriculum_italiano_dicembre_2016
curriculum_italiano_dicembre_2016curriculum_italiano_dicembre_2016
curriculum_italiano_dicembre_2016
sabino massaro
Come sviluppare applicazioni cross device con HTML
Come sviluppare applicazioni cross device con HTMLCome sviluppare applicazioni cross device con HTML
Come sviluppare applicazioni cross device con HTML
Sinergia Totale
14 - Web designer vs Web developer ...
14 - Web designer vs Web developer ... 14 - Web designer vs Web developer ...
14 - Web designer vs Web developer ...
Giuseppe Vizzari
I came, I saw, I GO! - Golangit meetup @ Codemotion Rome 2014
I came, I saw, I GO! - Golangit meetup @ Codemotion Rome 2014I came, I saw, I GO! - Golangit meetup @ Codemotion Rome 2014
I came, I saw, I GO! - Golangit meetup @ Codemotion Rome 2014
Giorgio Cefaro
I came i saw i go - golang it meetup codemotion rome 2014
I came i saw i go - golang it meetup codemotion rome 2014I came i saw i go - golang it meetup codemotion rome 2014
I came i saw i go - golang it meetup codemotion rome 2014
Giulio De Donato
I came, i saw, i go - Cefaro and De Donato
I came, i saw, i go - Cefaro and De DonatoI came, i saw, i go - Cefaro and De Donato
I came, i saw, i go - Cefaro and De Donato
Codemotion
Html5
Html5Html5
Html5
Cristiano Rastelli
Siamo tutti bravi con il browser degli altri!
Siamo tutti bravi con il browser degli altri!Siamo tutti bravi con il browser degli altri!
Siamo tutti bravi con il browser degli altri!
Francesco Sciuti
Plone in Regione Emilia-Romagna
Plone in Regione Emilia-RomagnaPlone in Regione Emilia-Romagna
Plone in Regione Emilia-Romagna
Giovanni Grazia
Le novit di Ionic 4- Il framework basato su Angular per sviluppare applicazi...
Le novit di Ionic 4- Il framework basato su Angular per sviluppare applicazi...Le novit di Ionic 4- Il framework basato su Angular per sviluppare applicazi...
Le novit di Ionic 4- Il framework basato su Angular per sviluppare applicazi...
Antonio Gallo
Mobile UI Design
Mobile UI DesignMobile UI Design
Mobile UI Design
Simone Viani
MonoTouch, un anno dopo
MonoTouch, un anno dopoMonoTouch, un anno dopo
MonoTouch, un anno dopo
Stefano Ottaviani
Augmented Reality: guardare il mondo da un altro punto di vista
Augmented Reality: guardare il mondo da un altro punto di vistaAugmented Reality: guardare il mondo da un altro punto di vista
Augmented Reality: guardare il mondo da un altro punto di vista
Codemotion
Google Chrome & Mozilla Firefox - Plugins & Extensions
Google Chrome & Mozilla Firefox - Plugins & ExtensionsGoogle Chrome & Mozilla Firefox - Plugins & Extensions
Google Chrome & Mozilla Firefox - Plugins & Extensions
Valeria Gennari
... thinking about Microformats!
... thinking about Microformats!... thinking about Microformats!
... thinking about Microformats!
Stefano Fago
follow-ap DAY 4: HTML5 e jQuery
follow-ap DAY 4: HTML5 e jQueryfollow-ap DAY 4: HTML5 e jQuery
follow-ap DAY 4: HTML5 e jQuery
QIRIS
Interazione multimodale su Mobile: interazione vocale, touch e grafica su div...
Interazione multimodale su Mobile: interazione vocale, touch e grafica su div...Interazione multimodale su Mobile: interazione vocale, touch e grafica su div...
Interazione multimodale su Mobile: interazione vocale, touch e grafica su div...
IWA
WordCamp Catania 2019 PWA e TWA
WordCamp Catania 2019 PWA e TWAWordCamp Catania 2019 PWA e TWA
WordCamp Catania 2019 PWA e TWA
FrancescoGiammanco1
Google Chrome Extensions & Plugin vs Firefox
Google Chrome Extensions & Plugin vs FirefoxGoogle Chrome Extensions & Plugin vs Firefox
Google Chrome Extensions & Plugin vs Firefox
WikiCorsoWeb
curriculum_italiano_dicembre_2016
curriculum_italiano_dicembre_2016curriculum_italiano_dicembre_2016
curriculum_italiano_dicembre_2016
sabino massaro
Come sviluppare applicazioni cross device con HTML
Come sviluppare applicazioni cross device con HTMLCome sviluppare applicazioni cross device con HTML
Come sviluppare applicazioni cross device con HTML
Sinergia Totale
14 - Web designer vs Web developer ...
14 - Web designer vs Web developer ... 14 - Web designer vs Web developer ...
14 - Web designer vs Web developer ...
Giuseppe Vizzari
I came, I saw, I GO! - Golangit meetup @ Codemotion Rome 2014
I came, I saw, I GO! - Golangit meetup @ Codemotion Rome 2014I came, I saw, I GO! - Golangit meetup @ Codemotion Rome 2014
I came, I saw, I GO! - Golangit meetup @ Codemotion Rome 2014
Giorgio Cefaro
I came i saw i go - golang it meetup codemotion rome 2014
I came i saw i go - golang it meetup codemotion rome 2014I came i saw i go - golang it meetup codemotion rome 2014
I came i saw i go - golang it meetup codemotion rome 2014
Giulio De Donato
I came, i saw, i go - Cefaro and De Donato
I came, i saw, i go - Cefaro and De DonatoI came, i saw, i go - Cefaro and De Donato
I came, i saw, i go - Cefaro and De Donato
Codemotion
Siamo tutti bravi con il browser degli altri!
Siamo tutti bravi con il browser degli altri!Siamo tutti bravi con il browser degli altri!
Siamo tutti bravi con il browser degli altri!
Francesco Sciuti
Plone in Regione Emilia-Romagna
Plone in Regione Emilia-RomagnaPlone in Regione Emilia-Romagna
Plone in Regione Emilia-Romagna
Giovanni Grazia
Le novit di Ionic 4- Il framework basato su Angular per sviluppare applicazi...
Le novit di Ionic 4- Il framework basato su Angular per sviluppare applicazi...Le novit di Ionic 4- Il framework basato su Angular per sviluppare applicazi...
Le novit di Ionic 4- Il framework basato su Angular per sviluppare applicazi...
Antonio Gallo
Mobile UI Design
Mobile UI DesignMobile UI Design
Mobile UI Design
Simone Viani

More from Codemotion (20)

Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Codemotion
Pompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending storyPompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending story
Codemotion
Pastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storiaPastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storia
Codemotion
Pennisi - Essere Richard Altwasser
Pennisi - Essere Richard AltwasserPennisi - Essere Richard Altwasser
Pennisi - Essere Richard Altwasser
Codemotion
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Codemotion
Richard S端selbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard S端selbeck - Building your own ride share app - Codemotion Amsterdam 2019Richard S端selbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard S端selbeck - Building your own ride share app - Codemotion Amsterdam 2019
Codemotion
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Codemotion
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 - Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Codemotion
Martin F旦rtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin F旦rtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...Martin F旦rtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin F旦rtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Codemotion
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Codemotion
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Codemotion
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Codemotion
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Codemotion
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Codemotion
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Codemotion
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
Codemotion
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Codemotion
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Codemotion
Dave Farley - Taking Back Software Engineering - Codemotion Amsterdam 2019
Dave Farley - Taking Back Software Engineering - Codemotion Amsterdam 2019Dave Farley - Taking Back Software Engineering - Codemotion Amsterdam 2019
Dave Farley - Taking Back Software Engineering - Codemotion Amsterdam 2019
Codemotion
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Codemotion
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Codemotion
Pompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending storyPompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending story
Codemotion
Pastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storiaPastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storia
Codemotion
Pennisi - Essere Richard Altwasser
Pennisi - Essere Richard AltwasserPennisi - Essere Richard Altwasser
Pennisi - Essere Richard Altwasser
Codemotion
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Codemotion
Richard S端selbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard S端selbeck - Building your own ride share app - Codemotion Amsterdam 2019Richard S端selbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard S端selbeck - Building your own ride share app - Codemotion Amsterdam 2019
Codemotion
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Codemotion
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 - Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Codemotion
Martin F旦rtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin F旦rtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...Martin F旦rtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin F旦rtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Codemotion
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Codemotion
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Codemotion
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Codemotion
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Codemotion
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Codemotion
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Codemotion
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
Codemotion
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Codemotion
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Codemotion
Dave Farley - Taking Back Software Engineering - Codemotion Amsterdam 2019
Dave Farley - Taking Back Software Engineering - Codemotion Amsterdam 2019Dave Farley - Taking Back Software Engineering - Codemotion Amsterdam 2019
Dave Farley - Taking Back Software Engineering - Codemotion Amsterdam 2019
Codemotion
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Codemotion

Sviluppare plugin per google Chrome

  • 1. Sviluppare plugin per Google Chrome Marco Vito Moscaritolo marco@agavee.com agavee
  • 2. Marco Vito Moscaritolo (aka mavimo) Sviluppatore web specializzato in Drupal Contatti: (per chi non lo conoscesse: ) @mavimo con particolare interessa verso le nuove marco@agavee.com tecnologie, sopratutto nel settore mobile. http://mavimo.org Attualmente lavora come freelance ed http://agavee.com all'interno del team agavee Marco Vito Moscaritolo marco@agavee.com agavee
  • 3. Cosa andiamo a vedere? Perch辿 sviluppare estensioni per browser ...perch辿 proprio per Google Chrome? Che tipologie di estesioni possiamo realizzare quanta scelta... forse troppa? La struttura di base di un estensione ...basta veramente poco! Le funzionalit implementate (API) ...o meglio, quelle gi implementa in da altri in modo da lavorare meno noi! Gli strumenti di debug ...non siamo perfetti, potremmo fare pure qualche errore? Il deploy dell'applicazione ....da Google o sul nostro sito? Varie ed eventuali ...sempre da mettere! Marco Vito Moscaritolo marco@agavee.com agavee
  • 4. Vantaggi nello sviluppare estensioni per browser? 100% dei PC usati come client hanno un browser (o possono averlo) Quasi tutti i browser supportano plugin (IE9, FF3/4, Google Chrome, Opera, ...) Possibilit di usare linguaggi molto conosciuti (javascript, HTML, XML/XUL ) Possibilit di lavorare in ambienti blindati (non serve cross-compatibilit) Possibilit di superare alcuni limiti di javascript con le API interne (browser- specifiche) Marco Vito Moscaritolo marco@agavee.com agavee
  • 5. Diffusione dei browser (mondo) http://gs.statcounter.com/ 60 50 40 30 20 10 0 2010-01 2010-02 2010-03 2010-04 2010-05 2010-06 2010-07 2010-08 2010-09 2010-10 2010-11 2010-12 2011-01 Marco Vito Moscaritolo marco@agavee.com agavee
  • 6. Diffusione dei browser (Europa) http://gs.statcounter.com/ 50 45 40 35 30 25 20 15 10 5 0 2010-01 2010-02 2010-03 2010-04 2010-05 2010-06 2010-07 2010-08 2010-09 2010-10 2010-11 2010-12 2011-01 Marco Vito Moscaritolo marco@agavee.com agavee
  • 7. Diffusione dei browser (Italia) http://gs.statcounter.com/ 60 50 40 30 20 10 0 2010-01 2010-02 2010-03 2010-04 2010-05 2010-06 2010-07 2010-08 2010-09 2010-10 2010-11 2010-12 2011-01 Marco Vito Moscaritolo marco@agavee.com agavee
  • 8. Tipologie di estesioni locali... ...remote Rapide nell'esecuzione Maggior controllo il carico 竪 sulla macchina infrastruttura ben definita, possibile usare software esterni Disponibilit off-line Codice lato server Utilizzo in mobilit il codice non viene distribuito nell'applicazione Utilizzo all'interno di altri siti Facilit di analisi dei problemi non devo basarmi SOLO sui feedback degli utenti Possono compiere operazioni in background Marco Vito Moscaritolo marco@agavee.com agavee
  • 9. Le tre tipologie principali Le modalit di esecuzione: Nelle tabs L'applicazione 竪 una pagina visibile nel browser In pop-up L'applicazione gira nel popup Nelle pagine L'applicazione gira in pagine web di sito (anche non nostro) In background Script L'applicazione gira in maniera silente per l'utente Marco Vito Moscaritolo marco@agavee.com agavee
  • 10. Ok, ma come sono fatte? Javascript ormai 竪 ovunque ed iniziamo ad usarlo abbastanza (anche grazie ai framework che sono nati) HTML con un buon supporto alle funzionalit HTML5 275 punti su 400 secondo http://beta.html5test.com/ ! Flash / Java / C / C++ / .NET / ... pe hy ol o (embedded) (NPAPI) s 竪 Non Marco Vito Moscaritolo marco@agavee.com agavee
  • 11. Struttura di base File di dichiarazione del plugin (manifest.json) un banalissimo file JSON Cartella di localizzazione (_locales) con sotto cartelle per ogni lingua lingue secondo le regole IETF language tags File HTML, JS, CSS ed immagini a piacere per condire il tutto alcuni file hanno nomi secondo convenzioni Marco Vito Moscaritolo marco@agavee.com agavee
  • 12. manifest.json { "name": "Codemotion", "version": "1.0", "description": "let's code an innovation world 速", "icons": { "48": "imgs/icon48.png", Informazioni di base dell'estensione "64": "imgs/icon64.png" }, "default_locale": "en_US", "browser_action": { Localizzazione "default_title": "__MSG_app_title__", }, "default_icon": "imgs/icon48.png", "popup": "generator.html" Interazione con il browser "options_page": "options.html", "permissions": [ Pagina di setup "tabs", ], "notifications", "http://www.codemotion.it/*" Permessi } "homepage_url": "http://www.codemotion.it/" Altre informazioni Marco Vito Moscaritolo marco@agavee.com agavee
  • 13. Localizzazione Il codice si trova in file isolati ad esempio _locales/IT/messages.json Utilizzo di JSON come formato per il file delle traduzioni Possibilit di usare placeholder per i testi 'app_title': { 'message' : 'Ciao $nome$', 'placeholders' : {'nome' : { 'content' : '$1' } } Possilibit di usare le API per accedere alle traduzioni var msg = chrome.i18n.getMessage('welcome', ['Marco']); document.getElementById('user_msg').innerHTML = msg; Marco Vito Moscaritolo marco@agavee.com agavee
  • 14. Pagina delle opzioni Definibile nel manifest.json Accessibile dal menu dell'estensione Possibilit di usare le funzionalit di HTML5 per salvare le informazioni all'interno del browser (localstorage, Local DB, ) var username = localStorage['auth_user']; var token = localStorage['auth_token']; Marco Vito Moscaritolo marco@agavee.com agavee
  • 15. Gestione dei permessi Fornisce accesso alle singole funzionalit (API specifiche), che esulano dai permessi specifici delle pagine web, ad esempio: Gestione delle tabs Storage locale illimitato Accesso alla cronologia Notifiche al sistema Permessi per chiamate XHR con autorizzazione sul dominio, anche attraverso l'utilizzo di pattern: http://*.codemotion.it/ws/* https://auth.codemotion.it/ws/* Marco Vito Moscaritolo marco@agavee.com agavee
  • 16. Estensioni locali (popup) Dichiarazione inserita all'interno di manifest.json elemento che deve essere caricato ed eseguito nel popup: 'browser_action': { 'popup': 'generator.html' } Popup gestibili a runtime (aggiunta, rimozione, settaggi, ) Possibilit di modificare a runtime il comportamento della visualizzazione ad esempio la modifica dell'aspetto dell'icona: chrome.browserAction.setBadgeBackgroundColor({ color: [208, 0, 24, 255] }); chrome.browserAction.setIcon({ path: 'operation_end.png' }); Marco Vito Moscaritolo marco@agavee.com agavee
  • 17. Estensioni locali (tabs) Dichiarazione inserita all'interno di manifest.json elemento che deve essere caricato ed eseguito nel popup: 'app': { 'launch': { 1 } 'local_path': 'main.html' 'urls': [ '*://*.codemotion.it/app/*' ], 2 'launch': { 'web_url': 'http://www.codemotion.it/app/start.html' }, } L'applicazione pu嘆 essere locale (1) o remota (2) Marco Vito Moscaritolo marco@agavee.com agavee
  • 18. Estensioni locali (background) Dichiarazione inserita all'interno di manifest.json 'background_page': 'background.html', Architettura basata su messaggi o connessioni persistenti tra pagina di background e altri elementi (popup, tabs, servizi remoti, altre pagine ) Marco Vito Moscaritolo marco@agavee.com agavee
  • 19. Estensioni locali (content script) Dichiarazione inserita all'interno di manifest.json 'content_scripts': [ { "matches": ["http://www.codemotion.it/*"], "css": ["css/mystyles.css"], "js": ["js/myscript.js"] } ], Permette di inserire codice (anche programmaticamente) all'interno di pagine web a cui non si ha direttamente accesso, per integrarne funzionalit o modificarne il comportamento Marco Vito Moscaritolo marco@agavee.com agavee
  • 20. Estensioni locali (native) Dichiarazione inserita all'interno del manifest.json: 'plugins': [ { "path": "plugins/codemotion.dll" }, { "path": "plugins/codemotion.so" }, { "path": "plugins/codemotion_64.so" } ], Permette di inserire codice scritto in C / C++ secondo le specifiche NPAPI che pu嘆 essere richiamato in javascript: <embed type="application/x-codemotion" id="codemotion"> <script> var CMP = document.getElementById("codemotion"); var res = CMP.getTalks(); document.getElementById('talk_list').innerHTML = res; </script> Marco Vito Moscaritolo marco@agavee.com agavee
  • 21. L'approccio... ...竪 javascript! Gestione asincrona delle chiamate Gestione ad eventi come per il DOM delle pagine nell'approccio classico javascript chrome.tabs.onCreated.addListener( function(Tab tab) { console.log(Aperta tab: + tab.url); } ); chrome.history.onVisited.addListener( function(HistoryItem result) { alert(result.visitCount); } ); Marco Vito Moscaritolo marco@agavee.com agavee
  • 22. Che API fornisce? chrome.bookmarks.* chrome.idle.* chrome.browserAction.* chrome.management.* chrome.contextMenus.* chrome.omnibox.* chrome.cookies.* chrome.pageAction.* chrome.extension.* chrome.tabs.* chrome.history.* chrome.windows.* chrome.i18n.* ...possono bastare, ma... Marco Vito Moscaritolo marco@agavee.com agavee
  • 23. ...stanno arrivando anche... chrome.experimental.clipboard.* chrome.experimental.infobars.* chrome.experimental.processes.* chrome.experimental.proxy.* chrome.experimental.sidebar.* chrome.experimental.webNavigation.* chrome.experimental.webRequest.* ...che sono sperimentali, ma utilizzabili! (NB: richiedono il permesso experimental) Marco Vito Moscaritolo marco@agavee.com agavee
  • 24. Gli strumenti di debug Sono gli stessi forniti per l'analisi delle pagine web standard alla fine si tratta proprio di CSS e Javascript Content inspector per il codice HTML/CSS con possibilit i modificarlo al volo (a la firebug) Possibilit di inserire brackpoint all'interno di codice javascript ed anche brackpoint condizionali, watcher di espressioni, analisi delle variabili nello scope Marco Vito Moscaritolo marco@agavee.com agavee
  • 25. Il deploy dell'applicazione Build automatico da parte del sistema di Distribuzione ad uso interno senza Google pubblicazione rendere l'estensione pubblica (web application ad uso aziendale, intranet) Possibilit di avere utenti beta-tester Pacchettizzazione da effettuare Sistema di distribuzione (e visibilit) pi湛 manualmente (lanciare un comando ampio passando i dati di firma e Possibilit di usare il sistema di vendita pacchettizzazione corretti) di Google Generazione del sistema di notifica degli Sistemi automatici di aggiornamento e aggiornamenti in maniera manuale (un versioning delle applicazioni file XML) Marco Vito Moscaritolo marco@agavee.com agavee
  • 26. Varie ed eventuali tutto oro quello che luccica? ...l'esperienza ci insegna, da qualche parte deve esserci la fregatura (o forse no?) :) Marco Vito Moscaritolo marco@agavee.com agavee
  • 27. Domande? 'attenz ione! Grazi e per l Marco Vito Moscaritolo marco@agavee.com agavee
  • 28. Reference Documentazione ufficiale: http://code.google.com/chrome/extensions/ Developer dashboard: https://chrome.google.com/webstore/developer/dashboard Presentazioni disponibili: http://www.slideshare.net/mihaiionescu/google-chrome-extensions-devfest09 http://www.slideshare.net/taobaoued/chrome-extension-develop-starts Legalese: https://chrome.google.com/extensions/intl/en/program_policies.html https://chrome.google.com/extensions/intl/en/dev_tos_text.html Marco Vito Moscaritolo marco@agavee.com agavee