Documente Academic
Documente Profesional
Documente Cultură
la nivel de client
programare Web
JavaScript în cadrul navigatorului Web
Dr. Sabin Buragawww.purl.org/net/busaco
“Solving the problem is more important
than being right.”
Milton Glaser
Dr. Sabin Buragawww.purl.org/net/busaco
Cum rulează programele JavaScript
în navigatorul Web?
Dr. Sabin Buragawww.purl.org/net/busaco
Majoritatea programelor JavaScript
rulează – sunt interpretate –
în navigatorul Web via un script engine
Dr. Sabin Buragawww.purl.org/net/busaco
Majoritatea programelor JavaScript
rulează – sunt interpretate –
în navigatorul Web via un script engine
HTML
Text
ImageElement
dom: browser
www.w3.org/TR/DOM-Level-2-HTML
dom: core
HTML HTML
Node Element
Element DivElement
interface HTMLCollection {
readonly attribute unsigned long length; // oferă lungimea listei
Node item (in unsigned long index); // oferă un nod via un index numeric
Node namedItem (in DOMString name); // furnizează un nod pe baza numelui
};
Dr. Sabin Buragawww.purl.org/net/busaco
Cum putem afla/modifica diverse informații
privind nodurile arborelui DOM?
Dr. Sabin Buragawww.purl.org/net/busaco
Informații referitoare la nodurile arborelui DOM
nodeType
nodeValue
innerHTML
utilizare
nerecomandabilă
Dr. Sabin Buragawww.purl.org/net/busaco
Informații referitoare la nodurile arborelui DOM
textContent
getAttribute (numeAtribut)
createElement (element)
createTextNode (nod)
appendChild (nod)
<div id="lumi"></div>
<h1 id="continut"></h1> a se studia exemplele
din arhivă
Dr. Sabin Buragawww.purl.org/net/busaco
arborele DOM corespunzător
codului HTML
generat prin program
inspectarea valorilor
proprietăților DOM
Dr. Sabin Buragawww.purl.org/net/busaco
Modificarea structurii arborelui DOM
removeChild (nod)
elimină un nod-copil
Dr. Sabin Buragawww.purl.org/net/busaco
Modificarea structurii arborelui DOM
cloneChild ()
drafts.csswg.org/cssom/
Dr. Sabin Buragawww.purl.org/net/busaco
Suport pentru procesarea proprietăților CSS
developer.mozilla.org/Web/API/CSSStyleDeclaration
Dr. Sabin Buragawww.purl.org/net/busaco
Găsirea de noduri via selectori CSS
www.w3.org/TR/selectors-api/
Dr. Sabin Buragawww.purl.org/net/busaco
Găsirea de noduri via selectori CSS
querySelector (selectori)
furnizează primul element – folosind traversarea
în adâncime în preordine – care se potrivește grupului
de selectori (delimitați de virgulă)
querySelectorAll (selectori)
oferă lista de tip NodeList a tuturor elementelor găsite
Dr. Sabin Buragawww.purl.org/net/busaco
Găsirea de noduri via selectori CSS
www.w3.org/TR/DOM-Level-2-Events/
Dr. Sabin Buragawww.purl.org/net/busaco
Tratarea evenimentelor
de parcurs http://javascript.info/bubbling-and-capturing
Dr. Sabin Buragawww.purl.org/net/busaco
fluxul de evenimente (T. Leithead et al., 2012)
mod = true
se încearcă tratarea evenimentului pornind
de la rădăcină până la obiectul-țintă – capture phase
Dr. Sabin Buragawww.purl.org/net/busaco
Tratarea evenimentelor
mod = false
se încearcă tratarea evenimentului atunci când
evenimentul e propagat de la obiectul unde a survenit
până la entitățile superioare lui – bubbling phase
Dr. Sabin Buragawww.purl.org/net/busaco
Tratarea evenimentelor
type
target
desemnează nodul
asupra căruia evenimentul a fost declanșat inițial
Dr. Sabin Buragawww.purl.org/net/busaco
Tratarea evenimentelor
currentTarget
bubbles
bubbles
bubbles
cancelable
cancelable
cancelable
removeEventListener ()
Dr. Sabin Buragawww.purl.org/net/busaco
Tratarea evenimentelor
preventDefault ()
Dr. Sabin Buragawww.purl.org/net/busaco
Tratarea evenimentelor
dispatchEvent ()
Dr. Sabin Buragawww.purl.org/net/busaco
Tratarea evenimentelor
stopPropagation ()
<!DOCTYPE html>
github.com/bpesquet/thejsway/blob/master/manuscript/chapter16.md
<html>
<head><meta charset="utf-8" /><title>Evenimente JS</title></head>
<body>
vezi exemplul
complet în arhivă
CustomEvent
dom.spec.whatwg.org/#interface-customevent
developer.mozilla.org/Web/API/CustomEvent
(în loc de) pauză
developer.mozilla.org/Web/API/Window
Dr. Sabin Buragawww.purl.org/net/busaco
Browser-ul Web oferă obiectul Window
amănunte: https://drafts.csswg.org/cssom-view/
Browser-ul Web oferă obiectul Window
developer.mozilla.org/Web/API/WindowEventHandlers
Dr. Sabin Buragawww.purl.org/net/busaco
suportul cumulat vizând evenimentele
oferit de navigatoarele Web actuale
https://caniuse.com/#search=event
Dr. Sabin Buragawww.purl.org/net/busaco
În ce manieră are loc transferul asincron
între aplicațiile de pe server
și documentul Web?
Dr. Sabin Buragawww.purl.org/net/busaco
AJAX – Asynchronous JavaScript And XML
a se revizita cursul
„Tehnologii Web”
Dr. Sabin Buragawww.purl.org/net/busaco
AJAX – Asynchronous JavaScript And XML
xhr.spec.whatwg.org
Dr. Sabin Buragawww.purl.org/net/busaco
Obiectul XMLHttpRequest
open ( )
send ( )
send ( )
abort ( )
setRequestHeader ( )
getResponseHeader ( )
getAllResponseHeaders ( )
readyState
status
statusText
responseText
responseXML
onreadystatechange
handler de tratare a
evenimentelor de transfer
Dr. Sabin Buragawww.purl.org/net/busaco
Obiectul XMLHttpRequest
detalii la xhr.spec.whatwg.org/#interface-formdata
Dr. Sabin Buragawww.purl.org/net/busaco
Noutăți:
procesul de transmitere a datelor spre server (upload)
poate avea asociat un handler specific
via proprietatea upload
Dr. Sabin Buragawww.purl.org/net/busaco
Noutăți:
progresul încărcării poate fi urmărit pe baza
funcționalităților specificate de interfața ProgressEvent
xhr.spec.whatwg.org/#interface-progressevent
Dr. Sabin Buragawww.purl.org/net/busaco
http://caniuse.com/
suportul oferit de browser
studiu de caz: RandomAjax
fetch (URL)
.then (status) // verificăm dacă datele au fost recepționate cu succes
.then ((response) => response.text ()) // transformăm obiectul răspunsului în șir de caract.
.then (function (response) { // procesăm secvența de numere
// înlocuim spațiile albe cu virgulă și plasăm conținutul
// în cadrul elementului HTML identificat prin 'numbers'
var numbers = document.getElementById ('numbers');
numbers.textContent = response.trim ().replace (/\W+/g, ', ');
})
.catch (function (error) { // a survenit o eroare :(
numbers.textContent = 'An error occurred: ' + error;
});
studiu de caz: PostJSON
graceful degradation
progressive enhancement
www.w3.org/wiki/Graceful_degradation_versus_progressive_enhancement
Dr. Sabin Buragawww.purl.org/net/busaco
Minimizarea traficului dintre browser și server
Dr. Sabin Buragawww.purl.org/net/busaco
Transferul de date poate fi monitorizat (+interceptat)
via instrumente dedicate
la nivel de desktop:
instrumentul WireShark
Dr. Sabin Buragawww.purl.org/net/busaco
inspecție a datelor vehiculate
cu instrumentele pentru
dezvoltatorii Web
oferite de browser
Dr. Sabin Buragawww.purl.org/net/busaco
Stabilirea unui mod de interacțiune clar
exemple negative:
distragerea utilizatorului
abuz de resurse (e.g., supradimensionarea arborelui DOM)
Dr. Sabin Buragawww.purl.org/net/busaco
Oferă premisele invocării asincrone de servicii Web
în stilul REST
privind programarea:
invocare de servicii Web (RESTful Service, JSON Message)
dialog între navigatorul Web și server
(Periodic Refresh, Submission Throttling, Cross-Domain Proxy)
asigurarea performanței (Fat Client, Browser-Side Cache,
Guesstimate, Predictive Fetch, Code Compression, On-Demand JS)
popularea arborelui DOM
Dr. Sabin Buragawww.purl.org/net/busaco
Șabloane de proiectare AJAX
inginerie Web:
jurnalizare (e.g., Logging)
depanare
inspecție de cod/date (DOM Inspection, Traffic Sniffing)
complementar Ajax
long polling
HTTP server push
Reverse Ajax
server-sent events
WebSocket
Dr. Sabin Buragawww.purl.org/net/busaco
Ajax/Comet oferă suport pentru dezvoltarea de
aplicații Web hibride – mash-ups
HTTP HTTP
JPG JPG
Same-Origin Policy
API API
public public
developer.mozilla.org/Web/Security/Same-origin_policy
var url = "http://profs.info.uaic.ro/~busaco/teach/courses/web/web-film";
interactiune web: ajax – studiu de caz