SlideShare ist ein Scribd-Unternehmen logo
1 von 71
Downloaden Sie, um offline zu lesen
Web2.0 med jQuery

faster, easier and a lot more fun
Hej




Lau Bech Lauritzen



                           2
Dagens menu
       Web
Browseren
 Javascript
    jQuery
    Plugins
       Tips



                 3
Web 1.0
• Monolog
• Mange sideskift
• Kort tid på hver side




                             4
Web 2.0
•   Dialog – user-generated content
•   Øget interaktion
•   Brugeroplevelsen
•   Webapplikationen




                                      5
6
Hi, I’m
JavaScript
                And I’m
             XMLHttpRequest




                              7
Client-Side Teknologi


     Ajax Kommunikation
   Events Interaktion
Animation Lir




                             8
Ajax




       9
Asyncronous javascript and xML
       XMLHttpRequest




                                 10
/ajax/form




             Server
XML/JSON




             11
Javascript



             12
Javascript historie
•   1995 JavaScript i Netscape
•   1996 JScript i Internet Explorer
•   1997 ECMAScript standardisering
•   1999-2005 – Ajax rulles ud
•   2006 XHR standard
•   95% Javascript slået til
•   Kæmpe platform

                                       13
Javascript
•   Underligt navn
•   Komplet sprog
•   Objektorienteret
•   First-class funktioner
•   Dynamiske typer
•   General-purpose



                                 14
CSS                  HTML

       Document Object Model

Javascript
                           layout



                                    15
DOM



                   <!DOCTYPE HTML
                   <html>

DOM != kildekode    <head>
                     <title>Index</head>
                    </head>
                    <body>                 Webserver



                                                       16
ARGH!


// Mozilla, Opera and webkit nightlies currently support this event
if ( document.addEventListener ) {
  // Use the handy event callback
  document.addEventListener( "DOMContentLoaded", function(){
    document.removeEventListener( "DOMContentLoaded", arguments.callee, false );
    jQuery.ready();
  }, false );

// If IE event model is used
} else if ( document.attachEvent ) {
  // ensure firing before onload,
  // maybe late but safe also for iframes
  document.attachEvent("onreadystatechange", function(){
    if ( document.readyState === "complete" ) {
      document.detachEvent( "onreadystatechange", arguments.callee );
      jQuery.ready();
    }
  });

    // If IE and not an iframe
    // continually check to see if the document is ready
    if ( document.documentElement.doScroll && window == window.top ) (function(){
      if ( jQuery.isReady ) return;

      try {
        // If IE is used, use the trick by Diego Perini
        // http://javascript.nwbox.com/IEContentLoaded/
        document.documentElement.doScroll("left");
      } catch( error ) {
        setTimeout( arguments.callee, 0 );
        return;
      }
    })();
}


                                                                                            17
$(document).ready(…);




                        18
Træls API


newDiv = document.createElement("div");
newDiv.innerHTML = "<h1>Hej!</h1>";
orgDiv = document.getElementById("orgDiv");
document.body.insertBefore(newDiv, orgDiv);




                                              19
$(“#orgDiv”).before(“<h1>Hej!</h1>”);




                                        20
Spaghetti
<script>
  function setLogout(obj) { ... }
</script>
<a
href="javascript:toggle('textde');document.getElementById(
'textes').style.display =
'none';document.getElementById('textfr').style.display =
'none';document.getElementById('textgb').style.display =
'none';void(0);"><img src="/img/debig.png" style="margin:
5px;"></a>
<a href="javascript:void(0);"
onclick="toggle('loginMenu');setLogout(this);void(0);"
onfocus="blur();">Log ind</a>



                                                         21
<script src=“common.js”/>
<a class=“language” href=“/de/">
  <img src=“/img/debig.png“/>
</a>
<a class=“login” href=“/login/“>Log ind</a>




                                         22
Sproget




          23
Javascript toolkits




                      24
25
26
27
jQuery
•   Startet i januar 2006
•   Forenkle og optimere webudvikling
•   DOM querysprog med CSS-notation
•   Minimal funktionalitet – udvides med plugins
•   Unobtrusive
•   Test suite 50 browsere, 11 platforme
•   Stort community – masser af plugins

                                                   28
Dig?




       29
30
Kompatibilitet


IE 6.0+, FF 2+, Safari 3.0+,
Opera 9.0+, Chrome




                               31
32
jQuery is designed to change
the way you write Javascript




                               33
jQuery basics
•   Inkluder en Javascript fil
•   jQuery fylder 19 KB
•   Tilføjer kun ”jQuery” til global scope
•   Alt er tilgængelig gennem jQuery-objektet
•   $ er en genvej
• $(document).ready(function() { ... });




                                                34
jQuery-måden


$( Find Things )
                   . Do Stuff ();




                                    35
jQuery-måden
         selector

  $( Find Things )
jQuery               . Do Stuff ();
                        metode




                                      36
$(”div”).hide();
$(”input”).remove();
$(”form”).submit();
$(”p”).addClass(”highlight”);
$(”span”).fadeIn(”fast”);




                                37
jQuery objektet
• Liste af DOM elementer
• Array-like
• Metoder
  – Implicit og eksplicit iteration
  – Nogle bruger kun det første element




                                          38
Selectors
$(”#menu”)
$(”.redButton”)
$(”p > a”)
$(”tr:even”)
$(”h1, h2, h3”)
$(”input[name=email]”)
$(”li:visible”)


                         http://docs.query.com/Selectors
                                                       39
Chaining


$(”a”).addClass(”active”)
      .css(”color”, ”yellow”)
      .show();




                                40
jQuery API
• Kortfattet, naturlig, konsistent
• Logisk, ofte gætbar
• Nemt at læse, forstå og huske




                                     41
jQuery’s fokus
•   DOM manipulation
•   Events
•   Ajax
•   Animation




                               42
DOM
•   .next() .prev()
•   .find() .children()
•   .parent() .parents()
•   .filter()




                             43
Manipulation
•   .text() .html()
•   .attr() .removeAttr(), .val()
•   .remove(), .clear()
•   .css(), .clone()
•   .wrap() .wrapInner(), .wrapAll()




                                       44
CSS
•   .css(key, value)
•   .css({key: values, key: value, ...})
•   .addClass() .removeClass()
•   .toggleClass()




                                           45
DOM opbygning
•   .append() .prepend()
•   .before() .after()
•   .insertBefore() .insertAfter()
•   $(”<div>Nyt element</div>”)




                                     46
jQuery overload
•   $(selector)
•   $(HTML)
•   $(DOM-element)
•   $(funktion)




                               47
48
DEMO




       49
Demo - The basics
– Includer jquery.js
– jQuery-objektet
– Ready handler




                               50
Demo - tabel
• Selectors
• CSS
• Manipulation




                            51
Events
•   .click(funktion) .click()
•   .toggle(funktion1, funktion2, ...) .toggle()
•   .bind(navn, funktion)
•   .one(navn, funktion)
•   .trigger(navn)
•   .live(navn, funktion), .die(navn)
•   .hover(funktion, funktion), etc.

                                                   52
Event handler callbacks
• thispeger altid på DOM-elementet
• Eventet tages med som parameter

   $(”a”).click(function(event) {
     alert(event.type);
     alert(this.href);
     alert($(this).attr(”href”));
   });



                                     53
Ajax
•   .load(url)
•   .load(url + ” ” + selector)
•   $.get()
•   $.post()
•   $.getJSON()
•   $.getScript()
•   $.ajax()

                                  54
Animationer
•   .show() .hide() .toggle()
•   .fadeIn() .fadeOut() .fadeTo()
•   .slideUp() .slideDown() .slideToggle()
•   .animate() .stop()




                                             55
Diverse
• .data(navn, værdi)
• Hjælpefunktioner
  – $.browser $.each() $.extend() $.merge()




                                              56
DEMO




       57
Demo - popup
• Events
• Ajax
• Unobtrusive




                           58
Pluginsystemet
• Mål: lille jQuery core
• Plugin systemet giver mulighed for udvidelser
• 3.478 plugins
  – Ajax, animationer, forms, menuer, widgets
• Enkle at udvikle
• Mange små plugins



                                                  59
<script src=”jquery.js”/>
<script src=”jquery.cookie.js”/>
<script src=”jquery.lightbox.js”/>




                                     60
Skriv et plugin
$.fn.popup = function() {
  var url = $(this).attr(”href”);
  if (url) {
    $(”#dialog”).load(url, function() {
      $(this).show();
    });
  }
  return $(this);
};




                                          61
Skriv et plugin
|(function($) {
  $.fn.popup = function() {
     var url = $(this).attr(”href”);
     if (url) {
       $(”#dialog”).load(url, function() {
         $(this).show();
       });
     }
     return $(this);
  };
|})(jQuery);




                                             62
Skriv et plugin
(function($) {
  $.fn.popup = function(container, options) {
|    var settings= $.extend({
|      attribute: ”href”
|    }, options);
     var url = $(this).attr(settings.attribute);
     if (url) {
       $(container).load(url, function() {
         $(this).show();
       });
     }
     return $(this);
  };
})(jQuery);



                                                   63
Flot




       64
Integration



$.plot(”#plot”, data);




               http://code.google.com/p/flot/
                                                65
jQuery UI




            66
Tips
•   Javascript i filer
•   Google CDN
•   Profile kode
•   Brug plugins!
•   Minify kode




                                67
Performance


$(”#id”)     $(”form[name*=email]”)



 var form = $(”form[name*=email]”);
 $(”input[name=address]”, form).val();
 form.submit();




                                         68
Udviklingsværktøjer
• Firefox
• Firebug
   –   Javascriptkonsol
   –   HTTP-forespørgsler
   –   Profiler
   –   Plugins – cookies, loadhastighed, etc.
• Web Developer
• Fiddler – Ajax debugging
• God editor
   – Syntax highlighting
   – Indrykning
   – TextMate, Notepad++, Emacs


                                                69
Horisonten
•   Javascriptfortolkere
•   Ny jQuery pluginside
•   Flere features
•   Desktop Javascript




                              70
Tak!
lau@iola.dk
yayart.com




              71

Weitere ähnliche Inhalte

Was ist angesagt?

ສ້າງລະບົບ Loin ດ້ວຍ php
ສ້າງລະບົບ Loin ດ້ວຍ phpສ້າງລະບົບ Loin ດ້ວຍ php
ສ້າງລະບົບ Loin ດ້ວຍ php
Bounsong Byv
 
Php codigos interfaces fredy guzman cusihunca
Php codigos interfaces   fredy guzman cusihuncaPhp codigos interfaces   fredy guzman cusihunca
Php codigos interfaces fredy guzman cusihunca
Tigger_Fred
 
2012-10-12 - NoSQL in .NET - mit Redis und Mongodb
2012-10-12 - NoSQL in .NET - mit Redis und Mongodb2012-10-12 - NoSQL in .NET - mit Redis und Mongodb
2012-10-12 - NoSQL in .NET - mit Redis und Mongodb
Johannes Hoppe
 
Documentacion edderson callpa_ortiz
Documentacion edderson callpa_ortizDocumentacion edderson callpa_ortiz
Documentacion edderson callpa_ortiz
Edderson J. Ortiz
 

Was ist angesagt? (20)

アプリ設定の保存をシンプルに
アプリ設定の保存をシンプルにアプリ設定の保存をシンプルに
アプリ設定の保存をシンプルに
 
第二节课:html5 – web开发步入新阶段
第二节课:html5 – web开发步入新阶段第二节课:html5 – web开发步入新阶段
第二节课:html5 – web开发步入新阶段
 
Praktik Pengembangan Konten HTML5 untuk E-Learning (Extended)
Praktik Pengembangan Konten HTML5 untuk E-Learning (Extended)Praktik Pengembangan Konten HTML5 untuk E-Learning (Extended)
Praktik Pengembangan Konten HTML5 untuk E-Learning (Extended)
 
Intro to jQuery UI
Intro to jQuery UIIntro to jQuery UI
Intro to jQuery UI
 
Symfony2でMongoDBと仲良くする方法
Symfony2でMongoDBと仲良くする方法Symfony2でMongoDBと仲良くする方法
Symfony2でMongoDBと仲良くする方法
 
Introducción a Bolt
Introducción a BoltIntroducción a Bolt
Introducción a Bolt
 
jQuery for beginners
jQuery for beginnersjQuery for beginners
jQuery for beginners
 
Workshop Teknis Javascript SMK Telkom Sandhy Putra Malang
Workshop Teknis Javascript SMK Telkom Sandhy Putra MalangWorkshop Teknis Javascript SMK Telkom Sandhy Putra Malang
Workshop Teknis Javascript SMK Telkom Sandhy Putra Malang
 
Sis quiz
Sis quizSis quiz
Sis quiz
 
jQuery プラグイン作成入門
jQuery プラグイン作成入門jQuery プラグイン作成入門
jQuery プラグイン作成入門
 
HTML5を使ったウェブアプリケーションの高速化
HTML5を使ったウェブアプリケーションの高速化HTML5を使ったウェブアプリケーションの高速化
HTML5を使ったウェブアプリケーションの高速化
 
ສ້າງລະບົບ Loin ດ້ວຍ php
ສ້າງລະບົບ Loin ດ້ວຍ phpສ້າງລະບົບ Loin ດ້ວຍ php
ສ້າງລະບົບ Loin ດ້ວຍ php
 
Introduction à Marionette
Introduction à MarionetteIntroduction à Marionette
Introduction à Marionette
 
Local storages
Local storagesLocal storages
Local storages
 
Php codigos interfaces fredy guzman cusihunca
Php codigos interfaces   fredy guzman cusihuncaPhp codigos interfaces   fredy guzman cusihunca
Php codigos interfaces fredy guzman cusihunca
 
Javascript技巧参考大全
Javascript技巧参考大全Javascript技巧参考大全
Javascript技巧参考大全
 
Android Fast Track CRUD Android PHP MySql
Android Fast Track CRUD Android PHP MySqlAndroid Fast Track CRUD Android PHP MySql
Android Fast Track CRUD Android PHP MySql
 
2012-10-12 - NoSQL in .NET - mit Redis und Mongodb
2012-10-12 - NoSQL in .NET - mit Redis und Mongodb2012-10-12 - NoSQL in .NET - mit Redis und Mongodb
2012-10-12 - NoSQL in .NET - mit Redis und Mongodb
 
Working With Ajax Frameworks
Working With Ajax FrameworksWorking With Ajax Frameworks
Working With Ajax Frameworks
 
Documentacion edderson callpa_ortiz
Documentacion edderson callpa_ortizDocumentacion edderson callpa_ortiz
Documentacion edderson callpa_ortiz
 

Andere mochten auch (18)

Haskell Foundations
Haskell FoundationsHaskell Foundations
Haskell Foundations
 
mpfi20080910
mpfi20080910mpfi20080910
mpfi20080910
 
Web2.0 with jQuery in English
Web2.0 with jQuery in EnglishWeb2.0 with jQuery in English
Web2.0 with jQuery in English
 
Artelements
ArtelementsArtelements
Artelements
 
Phones magazine
Phones magazinePhones magazine
Phones magazine
 
Conjuntivitis
ConjuntivitisConjuntivitis
Conjuntivitis
 
Katrina math 7H
Katrina math 7HKatrina math 7H
Katrina math 7H
 
Hyuk chan polyhedra
Hyuk chan polyhedraHyuk chan polyhedra
Hyuk chan polyhedra
 
Sky math challenge 7H
Sky math challenge 7HSky math challenge 7H
Sky math challenge 7H
 
مهارات التخطيط 2
مهارات التخطيط 2مهارات التخطيط 2
مهارات التخطيط 2
 
Keller (Bellevue/NYU) - Health and Human Rights
Keller (Bellevue/NYU) - Health and Human RightsKeller (Bellevue/NYU) - Health and Human Rights
Keller (Bellevue/NYU) - Health and Human Rights
 
Binary number
Binary numberBinary number
Binary number
 
Bankole (Guttmacher) - Unsafe Abortion
Bankole (Guttmacher) - Unsafe AbortionBankole (Guttmacher) - Unsafe Abortion
Bankole (Guttmacher) - Unsafe Abortion
 
مهارات التخطيط 1
مهارات التخطيط 1مهارات التخطيط 1
مهارات التخطيط 1
 
Adam aryabhatta
Adam aryabhattaAdam aryabhatta
Adam aryabhatta
 
Chae un simultaneous equation
Chae un simultaneous equationChae un simultaneous equation
Chae un simultaneous equation
 
Hub and Spoke
Hub and SpokeHub and Spoke
Hub and Spoke
 
Obligations site internet
Obligations site internetObligations site internet
Obligations site internet
 

Web2.0 with jQuery

  • 1. Web2.0 med jQuery faster, easier and a lot more fun
  • 3. Dagens menu Web Browseren Javascript jQuery Plugins Tips 3
  • 4. Web 1.0 • Monolog • Mange sideskift • Kort tid på hver side 4
  • 5. Web 2.0 • Dialog – user-generated content • Øget interaktion • Brugeroplevelsen • Webapplikationen 5
  • 6. 6
  • 7. Hi, I’m JavaScript And I’m XMLHttpRequest 7
  • 8. Client-Side Teknologi Ajax Kommunikation Events Interaktion Animation Lir 8
  • 9. Ajax 9
  • 10. Asyncronous javascript and xML XMLHttpRequest 10
  • 11. /ajax/form Server XML/JSON 11
  • 13. Javascript historie • 1995 JavaScript i Netscape • 1996 JScript i Internet Explorer • 1997 ECMAScript standardisering • 1999-2005 – Ajax rulles ud • 2006 XHR standard • 95% Javascript slået til • Kæmpe platform 13
  • 14. Javascript • Underligt navn • Komplet sprog • Objektorienteret • First-class funktioner • Dynamiske typer • General-purpose 14
  • 15. CSS HTML Document Object Model Javascript layout 15
  • 16. DOM <!DOCTYPE HTML <html> DOM != kildekode <head> <title>Index</head> </head> <body> Webserver 16
  • 17. ARGH! // Mozilla, Opera and webkit nightlies currently support this event if ( document.addEventListener ) { // Use the handy event callback document.addEventListener( "DOMContentLoaded", function(){ document.removeEventListener( "DOMContentLoaded", arguments.callee, false ); jQuery.ready(); }, false ); // If IE event model is used } else if ( document.attachEvent ) { // ensure firing before onload, // maybe late but safe also for iframes document.attachEvent("onreadystatechange", function(){ if ( document.readyState === "complete" ) { document.detachEvent( "onreadystatechange", arguments.callee ); jQuery.ready(); } }); // If IE and not an iframe // continually check to see if the document is ready if ( document.documentElement.doScroll && window == window.top ) (function(){ if ( jQuery.isReady ) return; try { // If IE is used, use the trick by Diego Perini // http://javascript.nwbox.com/IEContentLoaded/ document.documentElement.doScroll("left"); } catch( error ) { setTimeout( arguments.callee, 0 ); return; } })(); } 17
  • 19. Træls API newDiv = document.createElement("div"); newDiv.innerHTML = "<h1>Hej!</h1>"; orgDiv = document.getElementById("orgDiv"); document.body.insertBefore(newDiv, orgDiv); 19
  • 21. Spaghetti <script> function setLogout(obj) { ... } </script> <a href="javascript:toggle('textde');document.getElementById( 'textes').style.display = 'none';document.getElementById('textfr').style.display = 'none';document.getElementById('textgb').style.display = 'none';void(0);"><img src="/img/debig.png" style="margin: 5px;"></a> <a href="javascript:void(0);" onclick="toggle('loginMenu');setLogout(this);void(0);" onfocus="blur();">Log ind</a> 21
  • 22. <script src=“common.js”/> <a class=“language” href=“/de/"> <img src=“/img/debig.png“/> </a> <a class=“login” href=“/login/“>Log ind</a> 22
  • 23. Sproget 23
  • 25. 25
  • 26. 26
  • 27. 27
  • 28. jQuery • Startet i januar 2006 • Forenkle og optimere webudvikling • DOM querysprog med CSS-notation • Minimal funktionalitet – udvides med plugins • Unobtrusive • Test suite 50 browsere, 11 platforme • Stort community – masser af plugins 28
  • 29. Dig? 29
  • 30. 30
  • 31. Kompatibilitet IE 6.0+, FF 2+, Safari 3.0+, Opera 9.0+, Chrome 31
  • 32. 32
  • 33. jQuery is designed to change the way you write Javascript 33
  • 34. jQuery basics • Inkluder en Javascript fil • jQuery fylder 19 KB • Tilføjer kun ”jQuery” til global scope • Alt er tilgængelig gennem jQuery-objektet • $ er en genvej • $(document).ready(function() { ... }); 34
  • 35. jQuery-måden $( Find Things ) . Do Stuff (); 35
  • 36. jQuery-måden selector $( Find Things ) jQuery . Do Stuff (); metode 36
  • 38. jQuery objektet • Liste af DOM elementer • Array-like • Metoder – Implicit og eksplicit iteration – Nogle bruger kun det første element 38
  • 39. Selectors $(”#menu”) $(”.redButton”) $(”p > a”) $(”tr:even”) $(”h1, h2, h3”) $(”input[name=email]”) $(”li:visible”) http://docs.query.com/Selectors 39
  • 40. Chaining $(”a”).addClass(”active”) .css(”color”, ”yellow”) .show(); 40
  • 41. jQuery API • Kortfattet, naturlig, konsistent • Logisk, ofte gætbar • Nemt at læse, forstå og huske 41
  • 42. jQuery’s fokus • DOM manipulation • Events • Ajax • Animation 42
  • 43. DOM • .next() .prev() • .find() .children() • .parent() .parents() • .filter() 43
  • 44. Manipulation • .text() .html() • .attr() .removeAttr(), .val() • .remove(), .clear() • .css(), .clone() • .wrap() .wrapInner(), .wrapAll() 44
  • 45. CSS • .css(key, value) • .css({key: values, key: value, ...}) • .addClass() .removeClass() • .toggleClass() 45
  • 46. DOM opbygning • .append() .prepend() • .before() .after() • .insertBefore() .insertAfter() • $(”<div>Nyt element</div>”) 46
  • 47. jQuery overload • $(selector) • $(HTML) • $(DOM-element) • $(funktion) 47
  • 48. 48
  • 49. DEMO 49
  • 50. Demo - The basics – Includer jquery.js – jQuery-objektet – Ready handler 50
  • 51. Demo - tabel • Selectors • CSS • Manipulation 51
  • 52. Events • .click(funktion) .click() • .toggle(funktion1, funktion2, ...) .toggle() • .bind(navn, funktion) • .one(navn, funktion) • .trigger(navn) • .live(navn, funktion), .die(navn) • .hover(funktion, funktion), etc. 52
  • 53. Event handler callbacks • thispeger altid på DOM-elementet • Eventet tages med som parameter $(”a”).click(function(event) { alert(event.type); alert(this.href); alert($(this).attr(”href”)); }); 53
  • 54. Ajax • .load(url) • .load(url + ” ” + selector) • $.get() • $.post() • $.getJSON() • $.getScript() • $.ajax() 54
  • 55. Animationer • .show() .hide() .toggle() • .fadeIn() .fadeOut() .fadeTo() • .slideUp() .slideDown() .slideToggle() • .animate() .stop() 55
  • 56. Diverse • .data(navn, værdi) • Hjælpefunktioner – $.browser $.each() $.extend() $.merge() 56
  • 57. DEMO 57
  • 58. Demo - popup • Events • Ajax • Unobtrusive 58
  • 59. Pluginsystemet • Mål: lille jQuery core • Plugin systemet giver mulighed for udvidelser • 3.478 plugins – Ajax, animationer, forms, menuer, widgets • Enkle at udvikle • Mange små plugins 59
  • 61. Skriv et plugin $.fn.popup = function() { var url = $(this).attr(”href”); if (url) { $(”#dialog”).load(url, function() { $(this).show(); }); } return $(this); }; 61
  • 62. Skriv et plugin |(function($) { $.fn.popup = function() { var url = $(this).attr(”href”); if (url) { $(”#dialog”).load(url, function() { $(this).show(); }); } return $(this); }; |})(jQuery); 62
  • 63. Skriv et plugin (function($) { $.fn.popup = function(container, options) { | var settings= $.extend({ | attribute: ”href” | }, options); var url = $(this).attr(settings.attribute); if (url) { $(container).load(url, function() { $(this).show(); }); } return $(this); }; })(jQuery); 63
  • 64. Flot 64
  • 65. Integration $.plot(”#plot”, data); http://code.google.com/p/flot/ 65
  • 66. jQuery UI 66
  • 67. Tips • Javascript i filer • Google CDN • Profile kode • Brug plugins! • Minify kode 67
  • 68. Performance $(”#id”) $(”form[name*=email]”) var form = $(”form[name*=email]”); $(”input[name=address]”, form).val(); form.submit(); 68
  • 69. Udviklingsværktøjer • Firefox • Firebug – Javascriptkonsol – HTTP-forespørgsler – Profiler – Plugins – cookies, loadhastighed, etc. • Web Developer • Fiddler – Ajax debugging • God editor – Syntax highlighting – Indrykning – TextMate, Notepad++, Emacs 69
  • 70. Horisonten • Javascriptfortolkere • Ny jQuery pluginside • Flere features • Desktop Javascript 70