tartalom a javascript haladó lehet ségeiszerver2.lacszki.sulinet.hu/esti/kl/06halado.pdf · •...

14
1 A JavaScript haladó lehetĘségei webprogramozó Tartalom A szöveg, amit a látogató az oldalainkon olvashat Szövegként írjuk meg HTML elemekkel osztjuk egységekre Megjelenés A szöveg kinézete és elrendezése a weblapokon A szövegformázást, a bet Ħtípusokat, a színeket, a képeket stb jelenti Általában stílusokkal (CSS lapokkal) alakítjuk ki Viselkedés •MĦveletek, amelyek végrehajtásra kerülhetnek a látogatóval való kapcsolattartás során Kliensoldali vagy szerveroldali szkriptek segítségével történik. Progresszív fejlesztés A HTML dokumentum legyen annyira egyszerĦ, amennyire csak lehetséges A stíluslapok és a szkriptek segítségével egészítsük ki újabb és újabb tuljadonságokkal. A progresszív fejlesztés alapelvei A megjelenést külön CSS fájlban szabályozzuk, lehetĘség szerint ne szabályozzuk a megjelenést HTML elemekkel. A viselkedést külsĘ JavaScript fájlokkal szabályozzuk Az eseményeket szövegközi eseménykezelĘk nélkül adjuk a weboldalakhoz

Upload: others

Post on 24-Oct-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

  • 1

    A JavaScript haladólehet ségeiwebprogramozó

    Tartalom

    • A szöveg, amit a látogató az oldalainkonolvashat

    • Szövegként írjuk meg• HTML elemekkel osztjuk egységekre

    Megjelenés

    • A szöveg kinézete és elrendezése aweblapokon

    • A szövegformázást, a bet típusokat, aszíneket, a képeket stb jelenti

    • Általában stílusokkal (CSS lapokkal)alakítjuk ki

    Viselkedés

    • M veletek, amelyek végrehajtásrakerülhetnek a látogatóval valókapcsolattartás során

    • Kliensoldali vagy szerveroldali szkripteksegítségével történik.

    Progresszív fejlesztés

    • A HTML dokumentum legyen annyiraegyszer , amennyire csak lehetséges

    • A stíluslapok és a szkriptek segítségévelegészítsük ki újabb és újabbtuljadonságokkal.

    A progresszív fejlesztés alapelvei

    • A megjelenést külön CSS fájlbanszabályozzuk, lehet ség szerint neszabályozzuk a megjelenést HTMLelemekkel.

    • A viselkedést küls JavaScript fájlokkalszabályozzuk

    • Az eseményeket szövegközieseménykezel k nélkül adjuk aweboldalakhoz

  • 2

    Eseménykezel k beállítása

    • Egy adott HTML elemben:–

    • JavaScript fájlban:– window.onload=Startup;

    • A probléma, hogy ezzel a módszerrel egyelemhez csak egy eseménykezelállítható be.

    A W3C eseménymodellje

    • addEventListener() : az elemhez többeseménykezel is beállítható– window.addEventListener('load',Startup,

    false);• 'load' : az esemény neve, az 'on' nélkül

    (click, moseover, moseout, stb)• Startup : az eseménykezel függvény• false : hogyan kell kezelni, ha több

    esemény létezik (a false általábanmegfelel )

    Eseménykezel eltávolítása

    • window.removeEventListener('load',Startup,false);

    IE

    • Az IE 6 és 7-ig nem támogatja a W3Cmodellt.

    • Helyette:– window.attachEvent('onload',Startup);

    • onload : az esemény teljes neve• Startup : eseménykezel függvény• Eltávolítás

    – window.detachEvent('onload',Startup);

    Események meghatározásaböngész független módon

    • obj = document.getElementById("btn");• if (obj.addEventListener){• obj.addEventListener('click',ClickMe,false);• }else if (obj.attachEvent){• obj.attachEvent('onclick',ClickMe);• }else{• obj.onclick=ClickMe;• }

    Böngész adatok lekérése

    • navigator objektum• appCodeName : a böngész bels

    kódneve• appName : a böngész neve• appVersion : verziószám• userAgent : felhasználói ügynükfejléc• language : nyelv• platform : operációs rendszer

  • 3

    Feladat

    • Készítsünk olyan programot, amely kiírja aböngész nk adatait!

    A böngész tulajdonságai

    document.write("Bels kódnév:

    "+navigator.appCodeName);document.write("A böngész neve:

    "+navigator.appName);document.write("Verziószám:

    "+navigator.appVersion);document.write("Ügynök fejléc:

    "+navigator.userAgent);document.write("Nyelv: "+navigator.language);document.write("Operációs rendszer:

    "+navigator.platform);

    Furcsaságok

    • Sok webmester úgy szokta beállítani aweblapjait, hogy ha a böngész nem Mozillakéntazonosítja magát, akkor elirányítja (ezérthazudik az IE)

    • A verziószámnál pedig attól félnek, hogy azesetleges túl magas verziószám nem esik át asz n ("a nyílt forrású szoftverek területén nemnövekszenek a verziószámok olyan ütemben,mint az üzleti modell esetén) (ezért is hazudik azIE)

    Képességérzékelés

    • Ha például szeretnénk használni agetElementById() függvényt, aztmegvizsgálhatjuk, hogy létezik-e?

    • if (document.getElementById)

  • 4

    Feladat

    • Készítsünk olyan programot, amelyJavaScriptet ismer böngész eseténgrafikus jelöl négyzetet, azt nem ismerböngész esetén hagyományosjelöl négyzetet használ!

    Grafikus jelöl négyzet

    Hagyományos jelöl négyzet
    Grafikus jelöl négyzet

    function grafikus(negyzet){if (!document.getElementById) return;obj = document.getElementById(negyzet);parentobj = obj.parentNode;obj.style.visibility = "hidden";kep = document.createElement("IMG");kep.onclick = Kattint;kep.src = "uncheckedCheckBox.gif";kep.id = "kep"+negyzet;parentobj.insertBefore(kep,obj);

    }

  • 5

    function Kattint(e){if (!e) var e = window.event;if (e.target) kep = e.target;else kep = e.srcElement;jeloloid = kep.id.substring(3);jelolo = document.getElementById(jeloloid);jelolo.click();if (jelolo.checked) file = "checkedCheckBox.gif";else file = "uncheckedCheckBox.gif";kep.src = file;

    }

    grafikus("jel2");

    A megfelel programozásimódszerek

    • A programokat mindig rendezetten ésolvashatóan igyekezzünk megírni.

    • Tagoljunk helykihagyásokkal, használjunktabulátort és értelmes változóneveket

    • Használjunk sok megjegyzést• Minden utasítás végére tegyünk

    pontosvessz t• Minden változót a var kulcsszóval

    deklaráljunk, így könnyebbenmegállapítható a hatóköre.

    A megfelel programozásimódszerek

    • A bonyolult programokat osszuk logikairészekre

    • A nagyobb programokat több menetbenírjuk meg, és minden menet utánellen rizzük, hogy az addigi kód

    köd képes-e

    Formai hibák

    • A kulcsszavak, m veleti jelek, pontok,pontosvessz k, vessz k, stb. helytelenhasználatából adódnak

    • Leggyakrabban elgépelés soránkeletkeznek

    • A JavaScript értelmez is egyértelm enfelismeri, ezért könnyen javítható

    Értékadás és egyenl ségvizsgálat

    • Az = és az == m veletek felcseréléséb l,összekeveréséb l adódik

    • Gyakran az értelmez sem veszi észre,mert értelmezhet az utasítás.

    Helyi és globális változók

    • Egy blokkon belül deklarált változó értékéta blokkon kívül szeretnénk módosítani

  • 6

    Objektumok megfelel használata

    • pontos objektumneveket használjunk• Az objektum nevét, ha szükséges ne

    hagyjuk el a tagfüggvény neve el l.

    HTML hibák

    • Gyakori a záróelemek lefelejtése• A hibás HTML kód is okozhatja a

    JavaScript hibás m ködését.

    Alapszint hibakeres eszközök

    • Mozilla Firefox – Hibakonzol• A Notepad2 például színezéssel is segíti a

    helyes kódolás kivitelezését.

    onerror

    • A window objektum onerror tulajdonságáta hibakezel függvény nevére állíthatjuk

    • Ekkor a hagyományos hibaüzenet helyettez a függvényhívás zajlik le.

    • A böngész három paramétert tud átadniennek a függvénynek:– a hibaüzenet szövegét– a hibás dokumentum URL-jét– a hibás sor számát

    Feladat

    • Készítsünk olyan programot, amelyben ahibáról szóló információk egyfigyelmeztet ablakon jelennek meg!

  • 7

    Hibaüzenet

    function hiba(message,url,line){uzenet = "Hiba történt!\n";uzenet += "Hibaüzenet: "+message+"\n";uzenet += "URL: "+url+"\n";uzenet += "Sor: "+line;alert(uzenet);

    }window.onerror=hiba;

    A try és catch használata• A hibakezelés korszer bb módja• A try blokkjában adhatunk meg olyan kódot, ami

    esetleg hibát okozhat• A catch szó után pedig beírhatjuk a hibát kezel

    kódot

    try{az a kód ami hibát okozhat} catch(err){alert(err.description);}

    A Firefox webfejleszt i eszköztára

    • http://chrispederick.com/work/web-developer/

    http://chrispederick.com/work/web-

  • 8

    Az IE webfejleszt i eszköztára

    • http://www.microsoft.com/downloadS/details.aspx?familyid=E59C3964-672D-4511-BB3E-2D5E1DB91038&displaylang=en

    DOM Inspektor (Firefox)

    • Segítségével a weblap DOM szerkezetéttekinthetjük meg.

    • https://addons.mozilla.org/hu/firefox/addon/6622

    Tools > DOM Inspektor Execute JS

    • JavaScript shell• https://addons.mozilla.org/hu/firefox/addon

    /1729

    http://www.microsoft.com/downloadS/detaihttps://addons.mozilla.org/hu/firefox/addonhttps://addons.mozilla.org/hu/firefox/addon

  • 9

    Eszközök > Open Execute JS

    Feladat

    • Készítsünk olyan programot, amely gondolegy számot 1 és 100 között! Ezt a számotnekünk is ki kéne találni, ehheztippelhetünk, és a program azzal segít,hogy elárulja, hogy ennél nagyobbat, vagykisebbet gondolt-e.

    Forms > Display Form Details

    Miscellaneous > Edit HTML AJAX

    • Aszinkron JavaScript és XML• Lehet séget biztosít a felhasználói adatok

    webkiszolgálóra küldésére és viszont• XMLHttpRequest objektumom keresztül

    tarthat kapcsolatot az oldal awebkiszolgálóval

    • Távoli parancsvégrehajtás

  • 10

    A JavaScript ügyfél• A program létrehoz egy XMLHttpReguest

    objektumot, és elküldi a webkiszolgálónak, majdfolytatja a m ködését.

    • A kiszolgáló válaszként elküldi egy fájl tartalmátvagy egy kiszolgálóoldali program kimenetét.

    • Amikor a válasz megérkezik, elindul egyJavaScript függvény, amely m veleteket végezaz adatokon.

    • A program a DOM segítségével jeleníti meg akiszolgáló adatait, így az oldalt nem kellfrissíteni.

    A háttérprogram

    • Egyszer bb esetben egy statikus fájl• Gyakrabban PHP, Perl, Ruby vagy Python

    nyelv szerveroldali program• A JavaScript ezeknek a programoknak a

    GET vagy POST módszerrel küldhetadatokat.

    • GET esetében az URL-be kódolva• POST esetén külön.

    XML

    • A szerveroldali fájlok, vagy programokadatai XML formátumban érkeznek

    • A JavaScript ezeket XML-kezelfüggvényekkel dolgozhatja fel.

    • getElementsByTagName() : olyanelemeket keres, amely adott tagnévvelrendelkezik.

    • Az adatok ezen kívül lehetnek simaszövegek, vagy HTML formátumúak.

    Kérelem létrehozása

    • Létrehozzuk az objektumot:– ajaxkeres = new XMLHttpRequest();

    • URL megnyitása:– ajaxkeres.open("Get/Post",fájlnév)

    • Például:– ajaxkeres.open("Get","search.php?query=

    John");– Megnyitjuk a search.php fájlt és átadjuk a

    query paraméternek a John értéket.

    A kérelem elküldése

    • Elküldés:– ajaxkeres.send(paraméter);

    • A válasz megérkezéséig egyéb mástevékenységek is elvégezhet k, ezért egyeseménykezel t állítunk a válaszkezelésére:– ajaxkeres.onreadystatechange = függvény;

    A válasz értelmezése

    • Ha a readyState tulajdonság eléri a 4-esértéket, akkor a kérés teljesítésre került.

    • responseText : a választ nyers szövegkénttartalmazza

    • responseXML : a választ XMLformátumban tartalmazza

  • 11

    Feladat (Szükség lesz egywebkiszolgálóra)

    • Készítsünk olyan alkalmazást, amelykérdéseket tesz fel a felhasználónak, ésarra válaszokat vár! A kérdéseket és aválaszokat egy webkiszolgálón lév XMLfájlból olvassuk ki!

    • (Xerver telepítése, konfigurálása)

    AJAX könyvtárvar ajaxker = false, ajaxHiv;

    function ajaxKeres(fajlnev){try{

    ajaxker = new XMLHttpRequest();}catch(error){

    return false;}ajaxker.open("GET",fajlnev);ajaxker.onreadystatechange = ajaxValasz;ajaxker.send(null);

    }

    function ajaxValasz(){if (ajaxker.readyState != 4) return;if (ajaxker.status == 200){

    if (ajaxHiv) ajaxHivas();}else alert("Hibás kérés:"+ajaxker.statusText);

    return true;}

    A HTML fájl

    Teszt

    Kérdés:...

    Válasz:

    Az XML fájl (tesztkérdések)

    Mi Magyarország f városa?BudapestMelyik évben kezd dött az els

    világháború?1914Melyik DOM objektum tartalmazza az ablak URL-

    jét?locationMi az ECMAScript közkedvelt neve?JavaScript

  • 12

    A JavaScript fájl

    var kerdesszam = 0;

    function getKerdes(){obj = document.getElementById("kerdes");obj.firstChild.nodeValue="Kérem várjon !";ajaxHivas = kovKerdes;ajaxKeres("teszt.xml");

    }

    function kovKerdes(){kerdesek =ajaxker.responseXML.getElementsByTagName("kerd");

    obj = document.getElementById("kerdes");if (kerdesszam < kerdesek.length){k = kerdesek[kerdesszam].firstChild.nodeValue;obj.firstChild.nodeValue = k;

    }else{obj.firstChild.nodeValue = "Nincs több kérdés.";

    }}

    function ellenorzes(){valaszok =

    ajaxker.responseXML.getElementsByTagName("val");v = valaszok[kerdesszam].firstChild.nodeValue;valaszmezo = document.getElementById("valasz");if (v == valaszmezo.value) alert("A válasz helyes.");else alert("Helytelen. A helyes válasz: "+v);kerdesszam++;kovKerdes();

    }

    obj = document.getElementById("kezd");obj.onclick = getKerdes;obj2 = document.getElementById("elkuld");obj2.onclick = ellenorzes;

    Greasemonkey

    • Lehet vé teszi, hogy parancsokathasználjunk mások webhelyein.

    • https://addons.mozilla.org/hu/firefox/addon/748

    Felhasználói parancsfájlok

    • Nem feltöltjük ket a webhelyünkre• hanem a böngész ben telepítjük

    személyes használatra• *.user.js• Kész parancsfájlok letölthet k a következ

    címr l:• http://usercripts.org

    https://addons.mozilla.org/hu/firefox/addonhttp://usercripts.org

  • 13

    Feladat

    • Írjunk olyan felhasználói parancsfájlt,amely megváltoztatja a meglátogatottoldalak szöveg és háttérszínét, valamint alinkek színét!

    var elem =document.getElementsByTagName("body");

    for (var i=0; i

  • 14

    VÉGE