SlideShare una empresa de Scribd logo
1 de 45
Descargar para leer sin conexión
Aumentación Web del lado del cliente
con webextensions
Gabriela BOSETTI
LIFIA, Facultad de Informática, UNLP
gbosetti@lifia.info.unlp.edu.ar
Curso “Adaptación, personalización y Refactorización de aplicaciones Web”
Facultad de Informática, UNLP
Septiembre, 2018
Objetivos de la clase
● Comprender el concepto de extensión de navegador en el contexto
de la Aumentación Web.
○ Cómo desarrollar extensiones compatibles con múltiples navegadores
○ Arquitectura de una extensión
○ Tipos de scripts (privilegios, mecanismos de comunicación)
○ Manipular el DOM: contenido, estructura, estilo, comportamiento
○ Consumir contenido externo e integrarlo en la página actual
○ Determinar un contexto de uso del usuario
● Desarrollar una webextension, que permita explorar la API provista
por los diferentes navegadores.
○ ecma6, git, npm, webextensions, webextension-polyfill...
2
Extensiones de navegador
● Es una de las técnicas que permiten
adaptar aplicaciones Web de acuerdo de
los requerimientos del usuario.
● También se puede agregar componentes a
de la GUI del navegador
Personalizar la
experiencia de
navegación
● Las modificaciones necesarias se hacen mediante manipulación del DOM,
del lado del cliente.
● Las webextensions
○ tienen acceso a gran parte de los componentes y el comportamiento
del navegador.
○ Diferentes navegadores implementan una misma API.
○ Actualmente esta API es un borrador publicado por el Browser
Extension Community Group de la W3C.
3
Varias versiones de un mismo navegador
● Firefox
○ Add-on SDK
○ Bootstraped extensions
○ Overlay extensions
○ Firefox for Android SDK
4
Algunas diferencias
● Algunas claves del manifest.json son diferentes
● Algunas firmas de mensajes son diferentes, sobre todo
aquellos en donde hay un callback o una Promise.
● Los espacios de nombres para acceder a la API son diferentes:
https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Chrome_incompatibilities
5
Algunas diferencias
browser.runtime.sendMessage(
extensionId, // optional string
message, // any
options // optional object
)
chrome.runtime.sendMessage(
string extensionId,
any message,
object options,
function responseCallback
)
Promise
Callback
6
Algunas diferencias
● El borrador de estándar propone trabajar con Promesas
Promise<any> sendMessage(
long tabId,
any message,
optional BrowserExtTabSendMessageOptions details
);
● Existe una librería que permite las webextensions
“estandarizadas” puedan correr sobre aquellos navegadores
con API no estandarizada, con ningún o muy pequeños
cambios.
7
Componentes UI del browser
Cada extensión debe complir un único
propósito. Por ello:
● 1 solo botón en el toolbar
● 1 sidebar
● 1 entrada en el menú contextual
● ...
8
Componentes UI dentro de una página
● Sin embargo, se pueden generar
otros “componentes” dentro de la
capa de presentación de una
página
“Note that it's not possible for extension
to open sidebars programmatically:
sidebars can only be opened by the user”
https://developer.mozilla.org/en-US/docs
/Mozilla/Add-ons/WebExtensions/user_in
terface/Sidebars
Solución posible
9
Anatomía
Background
scripts
Content scripts
Browser UI
components
(e.g. browser action,
popup, context menus)
options
Web accessible
resources
Page actions
10
Dos tipos de scripts
Background scripts Content scripts
● Se ejecutan en el
contexto del navegador
● Una sola instancia por
navegador.
● No tienen tantas
restricciones como los
scripts convencionales
(ej. pueden evitar la
SOP)
● NO pueden manipular el
DOM.
● Browser-side debugging
tools
● Se ejecutan en el
contexto de una página
Web.
● Una instancia por
página.
● Pueden manipular el DOM.
● Tiene las restricciones
de un page-script.
● Page-side debugging
tools
11
Manipulación del DOM
div
div
div
h3
a
div
h3
a
div
div
h3
a
div (2) Application’s source code
(1) Application UI
(3) DOM
12
Dos tipos de scripts
Background
scripts
Content
scripts
browser.tabs.sendMessage
browser.runtime.sendMessage
browser.runtime.
onMessage.addListener
browser.runtime.
onMessage.addListener
13
Dos debuggers
Background
Content
14
Hands-on!
15
Crear el repo
1. Instalar git
2. Crear un nuevo repo en Github
3. Abrir una terminal donde queremos
que se encuentre el proyecto:
4. git clone https://.../demo.git
GIT: https://git-scm.com/downloads
Git cheatsheet: https://services.github.com/on-demand/downloads/github-git-cheat-sheet.pdf
16
servicio de
alojamiento
basado en web
para control de
versiones usando
git
software de control
de versiones
demo
⌙ readme.md
⌙ /docs
⌙ /tests
⌙ /src
Crear el esqueleto
Más allá de la anatomía, vamos a estructurar el proyecto en:
⌙ manifest.json
⌙ /resources
⌙ /options
⌙ /content_scripts
⌙ /background_scripts
Base de un proyecto, no necesariamente de
una webextension
⌙ main.js
⌙ ClassName.js
⌙ main.js
⌙ ClassName.js
17
readme.md
● Debe ser escrito en Markdown: un lenguaje de “marcado
ligero” con sintaxis de formato de texto plano.
● Un editor online: https://dillinger.io/
● Debe mencionar:
1. De qué se trata el proyecto
2. Cómo instalar lo necesario
3. Cómo usar lo que instalaron
4. Un ejemplo donde se muestra un
uso concreto
Por ejemplo,
https://github.com/gbosetti/todo-list-mongo-backend
#BuenaPráctica
18
manifest.json
Especicicación para Firefox: https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json
Especificación para Chrome: https://developer.chrome.com/extensions/manifest
Especificación para Opera: https://dev.opera.com/extensions/manifest/
Especificación para Edge: https://docs.microsoft.com/en-us/microsoft-edge/extensions/api-support/supported-manifest-keys
//Required for Firefox, Chrome, Opera and Edge
{
"manifest_version": 2,
"author": "gbosetti",
"name": "Demo",
"version": "1.0"
}
19
content_scripts/main.js
document.querySelector("body")
.style["background-color"] = "yellow";
{
...
"version",
"content_scripts": [{
"matches": ["*://*/*"],
"js": [ "content_scripts/main.js" ]
}]
}
Más sobre la manipulación del DOM: https://www.w3schools.com/js/js_htmldom.asp
Manipulación del DOM
20
Instalar la extensión
● chrome://extensions/
21
Primer commit
● Desde el directorio raíz, creamos el commit:
git add -A
git commit -m "Commit inicial con esqueleto
de la extensión y un script del lado de la
página que cambia su color de fondo"
● Para enviarlo al repo remoto:
git push
Git cheatsheet: https://services.github.com/on-demand/downloads/github-git-cheat-sheet.pdf
22
De background al content
mediante Browser action
23
Dos tipos de scripts
Background
scripts
Content
scripts
browser.tabs.sendMessage
browser.runtime.sendMessage
browser.runtime.
onMessage.addListener
browser.runtime.
onMessage.addListener
24
manifest
Algunos elementos de la UI
del browser tienen una
entrada especial: un popup,
sidebar, options, botón...
"browser_action": {
"default_icon": {
"64": "res/logo-64.png"
},
"default_title": "Demo"
}
Los archivos que necesitamos para
crear nuestra instancia del lado
del navegador. Puede ser más de
uno → [].
"background": {
"scripts": [
"background_scripts/MyClass.js",
"background_scripts/main.js"
]
}
Crear un archivo por clase, con
el nombre de la misma escrito en
CamelCase.
#BuenaPráctica
25
background_scripts/main.js
1. Crear la clase BackgroundExtension
● Sabe comunicarse con “la página”
● Sabe obtener el tab actual
2. Crear una instancia de
BackgroundExtension (extension)
3. Enviarle unmensaje desde el listener del
botón
26
Gestionando y usando
dependencias:
polyfill, text-mining,
tag-cloud
27
Gestionando dependencias
Tener instalado el gestor npm
Inicializamos el proyecto
npm init
Instalamos webextension-polyfill
npm install
webextension-polyfill@^0.2.1
Si clonamos el repo en otra compu:
npm install
28
Usando dependencias
"content_scripts": [{
...
"js": [
"node_modules/webextension-polyfill/dist/browser-polyfill.js",
...
]
}],
"background": {
"scripts": [
"node_modules/webextension-polyfill/dist/browser-polyfill.js",
...
]
}
29
Excluyendo dependencias del repo
Desde la raíz del proyecto:
git status
git status ./src/
Excluir dependencias
src/node_modules
Gitignore generator: https://www.gitignore.io/
30
Compromise
Compromise es una librería para hacer Natural Language
Processing en javascript:
https://www.npmjs.com/package/compromise
Esta librería permite obtener (entre otras cosas), en base a un
cuerpo, las “named-entities” (personas, lugares,
organizaciones). Esto es una manera de permitirnos conocer “el
tema” de una pieza de texto.
NLP: https://en.wikipedia.org/wiki/Natural_language_processing
Named-entity recognition: https://en.wikipedia.org/wiki/Named-entity_recognition
31
De content al background
mediante una acción del
usuario
32
Dos tipos de scripts
Background
scripts
Content
scripts
browser.tabs.sendMessage
browser.runtime.sendMessage
browser.runtime.
onMessage.addListener
browser.runtime.
onMessage.addListener
33
Listeners & send message
browser.runtime.sendMessage({
"call": "retrieveRelatedNews",
"args": { "keywords": topics[0].normal }
}).then(tweets => {
this.presentRelatedTweets(tweets);
});
document.querySelectorAll("div, p").forEach(div => {
div.addEventListener("dblclick", (evt) => {
...
});
});
Runtime > sendMessage: https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/sendMessage
34
Event listeners: https://www.w3schools.com/js/js_htmldom_eventlistener.asp
Recuperando
contenido externo
35
Same-origin policy
● Es parte del modelo de seguridad de una aplicación Web
● El navegador permite a los scripts de una página consumir datos
de otra, sólo si ambas pertenecen al mismo origen.
● Si los documentos son recuperados de distintos orígenes, son
aislados.
● Origen
○ esquema
○ hostname
○ puerto
Same-origin policy: https://www.w3.org/Security/wiki/Same_Origin_Policy
Ejemplo de caso permitido
http://example.com/doc.html (http, example.com, 80)
http://example.com/target.html (http, example.com, 80)
Ejemplo de caso NO permitido
http://example.com/doc.html (http, example.com, 80)
https://example.com/target.html (https, example.com, 80)
36
Recuperando contenido externo
● con XMLHttpRequest (desde el background)
● con un iframe (content + manifest)
○ inyectar en todos los documentos ("all_frames": true) un
content script que notifique el contenido del documento
al cargarse.
● ...
37
Opciones
de la extensión
38
Recuperando contenido externo
● En qué casos es necesario?
● Una entrada especial en el manifest
● al menos,
○ un archivo html
○ un script para el archivo html
● habilitar en permiso para acceder al storage
39
Ejercicio
40
Ejercicio
● Con la base de lo que vimos en esta clase, implementar los
mockups diseñados en la primera clase.
41
Recursos
42
Repo con la demo completa de clase
https://github.com/gbosetti/a-very-basic-demo-of
-webextensions
43
Repos con ejemplos de la comunidad
● de Firefox https://github.com/mdn/webextensions-examples
● de Chrome https://developer.chrome.com/extensions/samples
● de Opera
https://dev.opera.com/extensions/extension-samples/
● https://stackoverflow.com/search?q=webextensions
● https://wiki.mozilla.org/IRC
Ayuda de la comunidad
44
Aumentación Web del lado del cliente
con webextensions
Gabriela BOSETTI
LIFIA, Facultad de Informática, UNLP
gbosetti@lifia.info.unlp.edu.ar
Curso “Adaptación, personalización y Refactorización de aplicaciones Web”
Facultad de Informática, UNLP
Septiembre, 2018
45

Más contenido relacionado

La actualidad más candente

Presentacion navegadores
Presentacion navegadoresPresentacion navegadores
Presentacion navegadoreskeilitalara
 
Curso CDA: Seguridade e rendemento en Drupal
Curso CDA: Seguridade e rendemento en DrupalCurso CDA: Seguridade e rendemento en Drupal
Curso CDA: Seguridade e rendemento en DrupalAlberto Permuy Leal
 
Los navegadores más usados
Los navegadores más usadosLos navegadores más usados
Los navegadores más usadosmarcejesus
 
Caracteristicas De Navegadores
Caracteristicas De NavegadoresCaracteristicas De Navegadores
Caracteristicas De NavegadoresGalaxy PRO
 
Beatriz tamayo
Beatriz tamayoBeatriz tamayo
Beatriz tamayojhota19
 
Navegadores
Navegadores Navegadores
Navegadores delsas
 
Beatriz tamayo
Beatriz tamayoBeatriz tamayo
Beatriz tamayovgkvguk
 
Dragome en JavaConf Buenos Aires 2014
Dragome en JavaConf Buenos Aires 2014 Dragome en JavaConf Buenos Aires 2014
Dragome en JavaConf Buenos Aires 2014 Fernando Petrola
 
Beatriz tamayo
Beatriz tamayoBeatriz tamayo
Beatriz tamayojhota712
 
WebRTC y Kurento en el T3cgFest 2015
WebRTC y Kurento en el T3cgFest 2015WebRTC y Kurento en el T3cgFest 2015
WebRTC y Kurento en el T3cgFest 2015Micael Gallego
 
Mejora tu desarrollo web con Firefox Developer Edition y Google Chrome DevTools
Mejora tu desarrollo web con Firefox Developer Edition y Google Chrome DevToolsMejora tu desarrollo web con Firefox Developer Edition y Google Chrome DevTools
Mejora tu desarrollo web con Firefox Developer Edition y Google Chrome DevToolsIñaki Arenaza
 

La actualidad más candente (15)

Word wide web
Word wide webWord wide web
Word wide web
 
Presentacion navegadores
Presentacion navegadoresPresentacion navegadores
Presentacion navegadores
 
Navegadores (1)
Navegadores (1)Navegadores (1)
Navegadores (1)
 
Curso CDA: Seguridade e rendemento en Drupal
Curso CDA: Seguridade e rendemento en DrupalCurso CDA: Seguridade e rendemento en Drupal
Curso CDA: Seguridade e rendemento en Drupal
 
Los navegadores más usados
Los navegadores más usadosLos navegadores más usados
Los navegadores más usados
 
Navegadores (1)
Navegadores (1)Navegadores (1)
Navegadores (1)
 
Caracteristicas De Navegadores
Caracteristicas De NavegadoresCaracteristicas De Navegadores
Caracteristicas De Navegadores
 
Beatriz tamayo
Beatriz tamayoBeatriz tamayo
Beatriz tamayo
 
Navegadores
Navegadores Navegadores
Navegadores
 
Beatriz tamayo
Beatriz tamayoBeatriz tamayo
Beatriz tamayo
 
Dragome en JavaConf Buenos Aires 2014
Dragome en JavaConf Buenos Aires 2014 Dragome en JavaConf Buenos Aires 2014
Dragome en JavaConf Buenos Aires 2014
 
Beatriz tamayo
Beatriz tamayoBeatriz tamayo
Beatriz tamayo
 
WebRTC y Kurento en el T3cgFest 2015
WebRTC y Kurento en el T3cgFest 2015WebRTC y Kurento en el T3cgFest 2015
WebRTC y Kurento en el T3cgFest 2015
 
Performance en Drupal 7
Performance en Drupal 7Performance en Drupal 7
Performance en Drupal 7
 
Mejora tu desarrollo web con Firefox Developer Edition y Google Chrome DevTools
Mejora tu desarrollo web con Firefox Developer Edition y Google Chrome DevToolsMejora tu desarrollo web con Firefox Developer Edition y Google Chrome DevTools
Mejora tu desarrollo web con Firefox Developer Edition y Google Chrome DevTools
 

Similar a Desarrollo de webextensions

Gestionar mis proyectos con ayuda de CodeIgniter
Gestionar mis proyectos con ayuda de CodeIgniterGestionar mis proyectos con ayuda de CodeIgniter
Gestionar mis proyectos con ayuda de CodeIgniterandrewzg
 
Taller Open Cms Instalacion
Taller Open Cms InstalacionTaller Open Cms Instalacion
Taller Open Cms Instalacionosmarinero
 
Depurando Java Script - Programador PHP
Depurando Java Script - Programador PHPDepurando Java Script - Programador PHP
Depurando Java Script - Programador PHPJuan Belón Pérez
 
Gwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrascoGwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrascoManuel Carrasco Moñino
 
Mootools Y Otros Frameworks JS
Mootools Y Otros Frameworks JSMootools Y Otros Frameworks JS
Mootools Y Otros Frameworks JSIan Monge Pérez
 
Programación en ambiente web - Semana 2.pptx
Programación en ambiente web - Semana 2.pptxProgramación en ambiente web - Semana 2.pptx
Programación en ambiente web - Semana 2.pptxNoraDenisseOcampo1
 
SISTEMA DE GESTIÓN DE CONTENIDOS (CMS)
SISTEMA DE GESTIÓN DE CONTENIDOS (CMS)SISTEMA DE GESTIÓN DE CONTENIDOS (CMS)
SISTEMA DE GESTIÓN DE CONTENIDOS (CMS)SandraMartinezG
 
Fundamentos de python con orientación a objetos y basado en problemas con bas...
Fundamentos de python con orientación a objetos y basado en problemas con bas...Fundamentos de python con orientación a objetos y basado en problemas con bas...
Fundamentos de python con orientación a objetos y basado en problemas con bas...Universidad de San Buenaventura Medellín
 
Tema 1. aplicaciones web
Tema 1. aplicaciones webTema 1. aplicaciones web
Tema 1. aplicaciones webluismi04
 
Tutorial CodeIgniter + Netbeans 7
Tutorial CodeIgniter + Netbeans 7Tutorial CodeIgniter + Netbeans 7
Tutorial CodeIgniter + Netbeans 7Juan Fede
 
Tutorial de-codeblocks
Tutorial de-codeblocksTutorial de-codeblocks
Tutorial de-codeblocksMartinCetis109
 
Tutorial de-codeblocks (1)
Tutorial de-codeblocks (1)Tutorial de-codeblocks (1)
Tutorial de-codeblocks (1)MartinCetis109
 
Documentacion Final Proyecto UNIX
Documentacion Final Proyecto UNIXDocumentacion Final Proyecto UNIX
Documentacion Final Proyecto UNIXMoisesAlvarez38
 

Similar a Desarrollo de webextensions (20)

Gestionar mis proyectos con ayuda de CodeIgniter
Gestionar mis proyectos con ayuda de CodeIgniterGestionar mis proyectos con ayuda de CodeIgniter
Gestionar mis proyectos con ayuda de CodeIgniter
 
Taller Open Cms Instalacion
Taller Open Cms InstalacionTaller Open Cms Instalacion
Taller Open Cms Instalacion
 
Depurando Java Script - Programador PHP
Depurando Java Script - Programador PHPDepurando Java Script - Programador PHP
Depurando Java Script - Programador PHP
 
Gwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrascoGwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrasco
 
Pagina web
Pagina webPagina web
Pagina web
 
CodeIgniter
CodeIgniterCodeIgniter
CodeIgniter
 
Mootools Y Otros Frameworks JS
Mootools Y Otros Frameworks JSMootools Y Otros Frameworks JS
Mootools Y Otros Frameworks JS
 
Programación en ambiente web - Semana 2.pptx
Programación en ambiente web - Semana 2.pptxProgramación en ambiente web - Semana 2.pptx
Programación en ambiente web - Semana 2.pptx
 
Tutorial hacer un crud con prado
Tutorial hacer un crud con pradoTutorial hacer un crud con prado
Tutorial hacer un crud con prado
 
Tutoría 3
Tutoría 3Tutoría 3
Tutoría 3
 
Tutoría 3
Tutoría 3Tutoría 3
Tutoría 3
 
SISTEMA DE GESTIÓN DE CONTENIDOS (CMS)
SISTEMA DE GESTIÓN DE CONTENIDOS (CMS)SISTEMA DE GESTIÓN DE CONTENIDOS (CMS)
SISTEMA DE GESTIÓN DE CONTENIDOS (CMS)
 
Fundamentos de python con orientación a objetos y basado en problemas con bas...
Fundamentos de python con orientación a objetos y basado en problemas con bas...Fundamentos de python con orientación a objetos y basado en problemas con bas...
Fundamentos de python con orientación a objetos y basado en problemas con bas...
 
Tema 1. aplicaciones web
Tema 1. aplicaciones webTema 1. aplicaciones web
Tema 1. aplicaciones web
 
Diseño web
Diseño webDiseño web
Diseño web
 
Diseño web
Diseño webDiseño web
Diseño web
 
Tutorial CodeIgniter + Netbeans 7
Tutorial CodeIgniter + Netbeans 7Tutorial CodeIgniter + Netbeans 7
Tutorial CodeIgniter + Netbeans 7
 
Tutorial de-codeblocks
Tutorial de-codeblocksTutorial de-codeblocks
Tutorial de-codeblocks
 
Tutorial de-codeblocks (1)
Tutorial de-codeblocks (1)Tutorial de-codeblocks (1)
Tutorial de-codeblocks (1)
 
Documentacion Final Proyecto UNIX
Documentacion Final Proyecto UNIXDocumentacion Final Proyecto UNIX
Documentacion Final Proyecto UNIX
 

Más de Gabriela Bosetti

Introducción al desarrollo Web: Backend
Introducción al desarrollo Web: BackendIntroducción al desarrollo Web: Backend
Introducción al desarrollo Web: BackendGabriela Bosetti
 
Introducción al desarrollo Web: Frontend con Angular 6
Introducción al desarrollo Web: Frontend con Angular 6Introducción al desarrollo Web: Frontend con Angular 6
Introducción al desarrollo Web: Frontend con Angular 6Gabriela Bosetti
 
Flexible distribution of existing Web interfaces: an architecture involving d...
Flexible distribution of existing Web interfaces: an architecture involving d...Flexible distribution of existing Web interfaces: an architecture involving d...
Flexible distribution of existing Web interfaces: an architecture involving d...Gabriela Bosetti
 
Poster: Supporting Mobile Web Augmentation by End Users
Poster: Supporting Mobile Web Augmentation by End UsersPoster: Supporting Mobile Web Augmentation by End Users
Poster: Supporting Mobile Web Augmentation by End UsersGabriela Bosetti
 
An End User Development approach for Mobile Web Augmentation applications
An End User Development approach for Mobile Web Augmentation applicationsAn End User Development approach for Mobile Web Augmentation applications
An End User Development approach for Mobile Web Augmentation applicationsGabriela Bosetti
 
Towards full end-users control of social recommendations
Towards full end-users control of social recommendationsTowards full end-users control of social recommendations
Towards full end-users control of social recommendationsGabriela Bosetti
 
Abstracting and Structuring Web contents for supporting Personal Web Experie...
Abstracting and Structuring Web contents for supporting  Personal Web Experie...Abstracting and Structuring Web contents for supporting  Personal Web Experie...
Abstracting and Structuring Web contents for supporting Personal Web Experie...Gabriela Bosetti
 
From Search Engines to Augmented Search Services
From Search Engines to Augmented Search ServicesFrom Search Engines to Augmented Search Services
From Search Engines to Augmented Search ServicesGabriela Bosetti
 

Más de Gabriela Bosetti (8)

Introducción al desarrollo Web: Backend
Introducción al desarrollo Web: BackendIntroducción al desarrollo Web: Backend
Introducción al desarrollo Web: Backend
 
Introducción al desarrollo Web: Frontend con Angular 6
Introducción al desarrollo Web: Frontend con Angular 6Introducción al desarrollo Web: Frontend con Angular 6
Introducción al desarrollo Web: Frontend con Angular 6
 
Flexible distribution of existing Web interfaces: an architecture involving d...
Flexible distribution of existing Web interfaces: an architecture involving d...Flexible distribution of existing Web interfaces: an architecture involving d...
Flexible distribution of existing Web interfaces: an architecture involving d...
 
Poster: Supporting Mobile Web Augmentation by End Users
Poster: Supporting Mobile Web Augmentation by End UsersPoster: Supporting Mobile Web Augmentation by End Users
Poster: Supporting Mobile Web Augmentation by End Users
 
An End User Development approach for Mobile Web Augmentation applications
An End User Development approach for Mobile Web Augmentation applicationsAn End User Development approach for Mobile Web Augmentation applications
An End User Development approach for Mobile Web Augmentation applications
 
Towards full end-users control of social recommendations
Towards full end-users control of social recommendationsTowards full end-users control of social recommendations
Towards full end-users control of social recommendations
 
Abstracting and Structuring Web contents for supporting Personal Web Experie...
Abstracting and Structuring Web contents for supporting  Personal Web Experie...Abstracting and Structuring Web contents for supporting  Personal Web Experie...
Abstracting and Structuring Web contents for supporting Personal Web Experie...
 
From Search Engines to Augmented Search Services
From Search Engines to Augmented Search ServicesFrom Search Engines to Augmented Search Services
From Search Engines to Augmented Search Services
 

Último

Unidad II Doctrina de la Iglesia 1 parte
Unidad II Doctrina de la Iglesia 1 parteUnidad II Doctrina de la Iglesia 1 parte
Unidad II Doctrina de la Iglesia 1 parteJuan Hernandez
 
Flores Nacionales de América Latina - Botánica
Flores Nacionales de América Latina - BotánicaFlores Nacionales de América Latina - Botánica
Flores Nacionales de América Latina - BotánicaJuan Carlos Fonseca Mata
 
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...Carlos Muñoz
 
Metabolismo 3: Anabolismo y Fotosíntesis 2024
Metabolismo 3: Anabolismo y Fotosíntesis 2024Metabolismo 3: Anabolismo y Fotosíntesis 2024
Metabolismo 3: Anabolismo y Fotosíntesis 2024IES Vicent Andres Estelles
 
Factores ecosistemas: interacciones, energia y dinamica
Factores ecosistemas: interacciones, energia y dinamicaFactores ecosistemas: interacciones, energia y dinamica
Factores ecosistemas: interacciones, energia y dinamicaFlor Idalia Espinoza Ortega
 
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptDE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptELENA GALLARDO PAÚLS
 
Fundamentos y Principios de Psicopedagogía..pdf
Fundamentos y Principios de Psicopedagogía..pdfFundamentos y Principios de Psicopedagogía..pdf
Fundamentos y Principios de Psicopedagogía..pdfsamyarrocha1
 
programa dia de las madres 10 de mayo para evento
programa dia de las madres 10 de mayo  para eventoprograma dia de las madres 10 de mayo  para evento
programa dia de las madres 10 de mayo para eventoDiegoMtsS
 
Día de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialDía de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialpatriciaines1993
 
EXPECTATIVAS vs PERSPECTIVA en la vida.
EXPECTATIVAS vs PERSPECTIVA  en la vida.EXPECTATIVAS vs PERSPECTIVA  en la vida.
EXPECTATIVAS vs PERSPECTIVA en la vida.DaluiMonasterio
 
Estrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdfEstrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdfromanmillans
 
Plan Año Escolar Año Escolar 2023-2024. MPPE
Plan Año Escolar Año Escolar 2023-2024. MPPEPlan Año Escolar Año Escolar 2023-2024. MPPE
Plan Año Escolar Año Escolar 2023-2024. MPPELaura Chacón
 
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADODECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADOJosé Luis Palma
 
Heinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativoHeinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativoFundación YOD YOD
 
plan-de-trabajo-colegiado en una institucion educativa
plan-de-trabajo-colegiado en una institucion educativaplan-de-trabajo-colegiado en una institucion educativa
plan-de-trabajo-colegiado en una institucion educativafiorelachuctaya2
 
Lecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadLecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadAlejandrino Halire Ccahuana
 
Marketing y servicios 2ºBTP Cocina DGETP
Marketing y servicios 2ºBTP Cocina DGETPMarketing y servicios 2ºBTP Cocina DGETP
Marketing y servicios 2ºBTP Cocina DGETPANEP - DETP
 
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptxPresentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptxYeseniaRivera50
 
La Función tecnológica del tutor.pptx
La  Función  tecnológica  del tutor.pptxLa  Función  tecnológica  del tutor.pptx
La Función tecnológica del tutor.pptxJunkotantik
 

Último (20)

Unidad II Doctrina de la Iglesia 1 parte
Unidad II Doctrina de la Iglesia 1 parteUnidad II Doctrina de la Iglesia 1 parte
Unidad II Doctrina de la Iglesia 1 parte
 
Flores Nacionales de América Latina - Botánica
Flores Nacionales de América Latina - BotánicaFlores Nacionales de América Latina - Botánica
Flores Nacionales de América Latina - Botánica
 
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
 
Metabolismo 3: Anabolismo y Fotosíntesis 2024
Metabolismo 3: Anabolismo y Fotosíntesis 2024Metabolismo 3: Anabolismo y Fotosíntesis 2024
Metabolismo 3: Anabolismo y Fotosíntesis 2024
 
Factores ecosistemas: interacciones, energia y dinamica
Factores ecosistemas: interacciones, energia y dinamicaFactores ecosistemas: interacciones, energia y dinamica
Factores ecosistemas: interacciones, energia y dinamica
 
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptDE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
 
Fundamentos y Principios de Psicopedagogía..pdf
Fundamentos y Principios de Psicopedagogía..pdfFundamentos y Principios de Psicopedagogía..pdf
Fundamentos y Principios de Psicopedagogía..pdf
 
programa dia de las madres 10 de mayo para evento
programa dia de las madres 10 de mayo  para eventoprograma dia de las madres 10 de mayo  para evento
programa dia de las madres 10 de mayo para evento
 
Día de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialDía de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundial
 
EXPECTATIVAS vs PERSPECTIVA en la vida.
EXPECTATIVAS vs PERSPECTIVA  en la vida.EXPECTATIVAS vs PERSPECTIVA  en la vida.
EXPECTATIVAS vs PERSPECTIVA en la vida.
 
Estrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdfEstrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdf
 
Plan Año Escolar Año Escolar 2023-2024. MPPE
Plan Año Escolar Año Escolar 2023-2024. MPPEPlan Año Escolar Año Escolar 2023-2024. MPPE
Plan Año Escolar Año Escolar 2023-2024. MPPE
 
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADODECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
 
Heinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativoHeinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativo
 
plan-de-trabajo-colegiado en una institucion educativa
plan-de-trabajo-colegiado en una institucion educativaplan-de-trabajo-colegiado en una institucion educativa
plan-de-trabajo-colegiado en una institucion educativa
 
Lecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadLecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdad
 
Marketing y servicios 2ºBTP Cocina DGETP
Marketing y servicios 2ºBTP Cocina DGETPMarketing y servicios 2ºBTP Cocina DGETP
Marketing y servicios 2ºBTP Cocina DGETP
 
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptxPresentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
 
La Función tecnológica del tutor.pptx
La  Función  tecnológica  del tutor.pptxLa  Función  tecnológica  del tutor.pptx
La Función tecnológica del tutor.pptx
 
Tema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdf
Tema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdfTema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdf
Tema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdf
 

Desarrollo de webextensions

  • 1. Aumentación Web del lado del cliente con webextensions Gabriela BOSETTI LIFIA, Facultad de Informática, UNLP gbosetti@lifia.info.unlp.edu.ar Curso “Adaptación, personalización y Refactorización de aplicaciones Web” Facultad de Informática, UNLP Septiembre, 2018
  • 2. Objetivos de la clase ● Comprender el concepto de extensión de navegador en el contexto de la Aumentación Web. ○ Cómo desarrollar extensiones compatibles con múltiples navegadores ○ Arquitectura de una extensión ○ Tipos de scripts (privilegios, mecanismos de comunicación) ○ Manipular el DOM: contenido, estructura, estilo, comportamiento ○ Consumir contenido externo e integrarlo en la página actual ○ Determinar un contexto de uso del usuario ● Desarrollar una webextension, que permita explorar la API provista por los diferentes navegadores. ○ ecma6, git, npm, webextensions, webextension-polyfill... 2
  • 3. Extensiones de navegador ● Es una de las técnicas que permiten adaptar aplicaciones Web de acuerdo de los requerimientos del usuario. ● También se puede agregar componentes a de la GUI del navegador Personalizar la experiencia de navegación ● Las modificaciones necesarias se hacen mediante manipulación del DOM, del lado del cliente. ● Las webextensions ○ tienen acceso a gran parte de los componentes y el comportamiento del navegador. ○ Diferentes navegadores implementan una misma API. ○ Actualmente esta API es un borrador publicado por el Browser Extension Community Group de la W3C. 3
  • 4. Varias versiones de un mismo navegador ● Firefox ○ Add-on SDK ○ Bootstraped extensions ○ Overlay extensions ○ Firefox for Android SDK 4
  • 5. Algunas diferencias ● Algunas claves del manifest.json son diferentes ● Algunas firmas de mensajes son diferentes, sobre todo aquellos en donde hay un callback o una Promise. ● Los espacios de nombres para acceder a la API son diferentes: https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Chrome_incompatibilities 5
  • 6. Algunas diferencias browser.runtime.sendMessage( extensionId, // optional string message, // any options // optional object ) chrome.runtime.sendMessage( string extensionId, any message, object options, function responseCallback ) Promise Callback 6
  • 7. Algunas diferencias ● El borrador de estándar propone trabajar con Promesas Promise<any> sendMessage( long tabId, any message, optional BrowserExtTabSendMessageOptions details ); ● Existe una librería que permite las webextensions “estandarizadas” puedan correr sobre aquellos navegadores con API no estandarizada, con ningún o muy pequeños cambios. 7
  • 8. Componentes UI del browser Cada extensión debe complir un único propósito. Por ello: ● 1 solo botón en el toolbar ● 1 sidebar ● 1 entrada en el menú contextual ● ... 8
  • 9. Componentes UI dentro de una página ● Sin embargo, se pueden generar otros “componentes” dentro de la capa de presentación de una página “Note that it's not possible for extension to open sidebars programmatically: sidebars can only be opened by the user” https://developer.mozilla.org/en-US/docs /Mozilla/Add-ons/WebExtensions/user_in terface/Sidebars Solución posible 9
  • 10. Anatomía Background scripts Content scripts Browser UI components (e.g. browser action, popup, context menus) options Web accessible resources Page actions 10
  • 11. Dos tipos de scripts Background scripts Content scripts ● Se ejecutan en el contexto del navegador ● Una sola instancia por navegador. ● No tienen tantas restricciones como los scripts convencionales (ej. pueden evitar la SOP) ● NO pueden manipular el DOM. ● Browser-side debugging tools ● Se ejecutan en el contexto de una página Web. ● Una instancia por página. ● Pueden manipular el DOM. ● Tiene las restricciones de un page-script. ● Page-side debugging tools 11
  • 12. Manipulación del DOM div div div h3 a div h3 a div div h3 a div (2) Application’s source code (1) Application UI (3) DOM 12
  • 13. Dos tipos de scripts Background scripts Content scripts browser.tabs.sendMessage browser.runtime.sendMessage browser.runtime. onMessage.addListener browser.runtime. onMessage.addListener 13
  • 16. Crear el repo 1. Instalar git 2. Crear un nuevo repo en Github 3. Abrir una terminal donde queremos que se encuentre el proyecto: 4. git clone https://.../demo.git GIT: https://git-scm.com/downloads Git cheatsheet: https://services.github.com/on-demand/downloads/github-git-cheat-sheet.pdf 16 servicio de alojamiento basado en web para control de versiones usando git software de control de versiones
  • 17. demo ⌙ readme.md ⌙ /docs ⌙ /tests ⌙ /src Crear el esqueleto Más allá de la anatomía, vamos a estructurar el proyecto en: ⌙ manifest.json ⌙ /resources ⌙ /options ⌙ /content_scripts ⌙ /background_scripts Base de un proyecto, no necesariamente de una webextension ⌙ main.js ⌙ ClassName.js ⌙ main.js ⌙ ClassName.js 17
  • 18. readme.md ● Debe ser escrito en Markdown: un lenguaje de “marcado ligero” con sintaxis de formato de texto plano. ● Un editor online: https://dillinger.io/ ● Debe mencionar: 1. De qué se trata el proyecto 2. Cómo instalar lo necesario 3. Cómo usar lo que instalaron 4. Un ejemplo donde se muestra un uso concreto Por ejemplo, https://github.com/gbosetti/todo-list-mongo-backend #BuenaPráctica 18
  • 19. manifest.json Especicicación para Firefox: https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json Especificación para Chrome: https://developer.chrome.com/extensions/manifest Especificación para Opera: https://dev.opera.com/extensions/manifest/ Especificación para Edge: https://docs.microsoft.com/en-us/microsoft-edge/extensions/api-support/supported-manifest-keys //Required for Firefox, Chrome, Opera and Edge { "manifest_version": 2, "author": "gbosetti", "name": "Demo", "version": "1.0" } 19
  • 20. content_scripts/main.js document.querySelector("body") .style["background-color"] = "yellow"; { ... "version", "content_scripts": [{ "matches": ["*://*/*"], "js": [ "content_scripts/main.js" ] }] } Más sobre la manipulación del DOM: https://www.w3schools.com/js/js_htmldom.asp Manipulación del DOM 20
  • 21. Instalar la extensión ● chrome://extensions/ 21
  • 22. Primer commit ● Desde el directorio raíz, creamos el commit: git add -A git commit -m "Commit inicial con esqueleto de la extensión y un script del lado de la página que cambia su color de fondo" ● Para enviarlo al repo remoto: git push Git cheatsheet: https://services.github.com/on-demand/downloads/github-git-cheat-sheet.pdf 22
  • 23. De background al content mediante Browser action 23
  • 24. Dos tipos de scripts Background scripts Content scripts browser.tabs.sendMessage browser.runtime.sendMessage browser.runtime. onMessage.addListener browser.runtime. onMessage.addListener 24
  • 25. manifest Algunos elementos de la UI del browser tienen una entrada especial: un popup, sidebar, options, botón... "browser_action": { "default_icon": { "64": "res/logo-64.png" }, "default_title": "Demo" } Los archivos que necesitamos para crear nuestra instancia del lado del navegador. Puede ser más de uno → []. "background": { "scripts": [ "background_scripts/MyClass.js", "background_scripts/main.js" ] } Crear un archivo por clase, con el nombre de la misma escrito en CamelCase. #BuenaPráctica 25
  • 26. background_scripts/main.js 1. Crear la clase BackgroundExtension ● Sabe comunicarse con “la página” ● Sabe obtener el tab actual 2. Crear una instancia de BackgroundExtension (extension) 3. Enviarle unmensaje desde el listener del botón 26
  • 27. Gestionando y usando dependencias: polyfill, text-mining, tag-cloud 27
  • 28. Gestionando dependencias Tener instalado el gestor npm Inicializamos el proyecto npm init Instalamos webextension-polyfill npm install webextension-polyfill@^0.2.1 Si clonamos el repo en otra compu: npm install 28
  • 29. Usando dependencias "content_scripts": [{ ... "js": [ "node_modules/webextension-polyfill/dist/browser-polyfill.js", ... ] }], "background": { "scripts": [ "node_modules/webextension-polyfill/dist/browser-polyfill.js", ... ] } 29
  • 30. Excluyendo dependencias del repo Desde la raíz del proyecto: git status git status ./src/ Excluir dependencias src/node_modules Gitignore generator: https://www.gitignore.io/ 30
  • 31. Compromise Compromise es una librería para hacer Natural Language Processing en javascript: https://www.npmjs.com/package/compromise Esta librería permite obtener (entre otras cosas), en base a un cuerpo, las “named-entities” (personas, lugares, organizaciones). Esto es una manera de permitirnos conocer “el tema” de una pieza de texto. NLP: https://en.wikipedia.org/wiki/Natural_language_processing Named-entity recognition: https://en.wikipedia.org/wiki/Named-entity_recognition 31
  • 32. De content al background mediante una acción del usuario 32
  • 33. Dos tipos de scripts Background scripts Content scripts browser.tabs.sendMessage browser.runtime.sendMessage browser.runtime. onMessage.addListener browser.runtime. onMessage.addListener 33
  • 34. Listeners & send message browser.runtime.sendMessage({ "call": "retrieveRelatedNews", "args": { "keywords": topics[0].normal } }).then(tweets => { this.presentRelatedTweets(tweets); }); document.querySelectorAll("div, p").forEach(div => { div.addEventListener("dblclick", (evt) => { ... }); }); Runtime > sendMessage: https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/sendMessage 34 Event listeners: https://www.w3schools.com/js/js_htmldom_eventlistener.asp
  • 36. Same-origin policy ● Es parte del modelo de seguridad de una aplicación Web ● El navegador permite a los scripts de una página consumir datos de otra, sólo si ambas pertenecen al mismo origen. ● Si los documentos son recuperados de distintos orígenes, son aislados. ● Origen ○ esquema ○ hostname ○ puerto Same-origin policy: https://www.w3.org/Security/wiki/Same_Origin_Policy Ejemplo de caso permitido http://example.com/doc.html (http, example.com, 80) http://example.com/target.html (http, example.com, 80) Ejemplo de caso NO permitido http://example.com/doc.html (http, example.com, 80) https://example.com/target.html (https, example.com, 80) 36
  • 37. Recuperando contenido externo ● con XMLHttpRequest (desde el background) ● con un iframe (content + manifest) ○ inyectar en todos los documentos ("all_frames": true) un content script que notifique el contenido del documento al cargarse. ● ... 37
  • 39. Recuperando contenido externo ● En qué casos es necesario? ● Una entrada especial en el manifest ● al menos, ○ un archivo html ○ un script para el archivo html ● habilitar en permiso para acceder al storage 39
  • 41. Ejercicio ● Con la base de lo que vimos en esta clase, implementar los mockups diseñados en la primera clase. 41
  • 43. Repo con la demo completa de clase https://github.com/gbosetti/a-very-basic-demo-of -webextensions 43
  • 44. Repos con ejemplos de la comunidad ● de Firefox https://github.com/mdn/webextensions-examples ● de Chrome https://developer.chrome.com/extensions/samples ● de Opera https://dev.opera.com/extensions/extension-samples/ ● https://stackoverflow.com/search?q=webextensions ● https://wiki.mozilla.org/IRC Ayuda de la comunidad 44
  • 45. Aumentación Web del lado del cliente con webextensions Gabriela BOSETTI LIFIA, Facultad de Informática, UNLP gbosetti@lifia.info.unlp.edu.ar Curso “Adaptación, personalización y Refactorización de aplicaciones Web” Facultad de Informática, UNLP Septiembre, 2018 45