[img[cuttingfig02.gif]]
!Security Restrictions\n*Browser Settings\n*Firewalls\n\n!JVM differences\n*IE Mac JVM not scriptable\n\n!Browser Upgrades\n*Netscape 5\n**JVM different \n***security model\n*XP\n**Bye-bye JVM\n
Ajax Transport Layer Alternatives
[[Early Browser Scriptability]] : [[Microsoft Remote Scripting]] \n[[Other Embeddable Transports]] : [[Browser Native Transports]] : [[Convergence]]\n
!Remote Procedure Calls\n*Part of Microsoft Scripting Library \n**Java Applet on client\n**Active Server Pages on server\n*invoke server procedures from client\n**proxy object\n**data marshalling\n\n1998 - [[Dino Esposito's MIND Article|http://www.microsoft.com/mind/0498/cutting0498.asp]] \n1999 - [[Andrew Clinick's MSDN Tutorial|http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnclinic/html/scripting041299.asp]]\n\n!Java Issues\n*Browser Settings\n*Firewalls\n*IE Mac JVM not scriptable\n*Browser Upgrades\n**Netscape 5\n***security model\n**XP\n***Bye-bye JVM\n
''Early 2000's - Browser features converge''\n!Standards (~1999)\n*[[DOM|http://www.w3.org/DOM/]]\n*[[CSS|http://www.w3.org/Style/CSS/]]\n*~JavaScript 1.5 / [[ECMAScript 3|http://www.ecma-international.org/publications/standards/Ecma-262.htm]]\n\n!~XMLHttpRequest adoption (2001+)\n*Mozilla 1.0\n*Safari 1.2\n*Opera 8.0\n\n!Browser Adoption, Attrition\n*~Y2K, technology refresh\n*Up with Mozilla / Firefox / Opera / Safari / IE 5+\n*Down with Netscape 4.x, IE pre-5\n\n!2005 - Jesse [[utters the A-word|http://www.adaptivepath.com/publications/essays/archives/000385.php]]\n*[[O frabjous day!|http://www.jabberwocky.com/carroll/jabber/jabberwocky.html]] Callooh! Callay!
<<option chkOpenInNewWindow>> OpenLinksInNewWindow\n<<option chkAutoSave>> AutoSave\n<<option chkSaveBackups>> SaveBackups\n<<option chkSaveEmptyTemplate>> SaveEmptyTemplate\n<<option chkToggleLinks>> Clicking on links to tiddlers that are already open causes them to close\n^^(override with Control or other modifier key)^^\n<<option chkHttpReadOnly>> HideEditingFeatures when viewed over HTTP
!Reference\n[[W3C Spec|http://www.w3.org/TR/DOM-Level-3-LS/Overview.html#contents]]\n\n!Features\n*set of interfaces for loading and saving document objects and fragments\n** Serializer, Parser\n** Input, Output Streams\n** Stream Reader and Writer\n\n*Parser takes specified action against supplied DOM context node once loaded\n**Append as Children\n**Replace Children\n**etc\n\n*[[Taconite|http://taconite.sourceforge.net/]] works similarly but with XHR as transport\n\n!Pros\n*~W3C Recommendation\n\n!Cons\n*only barely implemented by Opera 7.6+\n*partial Mozilla implementation
!References\n[[Eric Costello's Apple article|http://developer.apple.com/internet/webcontent/iframe.html]] : [[AjaxPatterns|http://ajaxpatterns.org/IFrame_Call]]\n\n!Features\n*Hidden Iframe(s)\n*GET or POST\n*Callbacks\n\n!Pros\n*wide browser compatibility\n\n!Cons\n*browser history\n*that #@%^! IE click\n*iframe [[not supported|http://www.ashleyit.com/blogs/brentashley/archives/000443.html]] by XHTML strict\n*cross-domain policy\n** [[iframe communication hacks|http://blog.monstuff.com/archives/000304.html]]\n!Code\n{{{\n<iframe \n id='Iframe' \n style="height=1px;width=1px;visibility:hidden" \n/> \n\nfunction doIframe( url ){\n var iframe = document.getElementById('Iframe');\n iframe.onload=onIframeLoad;\n iframe.src = url;\n} \n \nfunction onIframeLoad(){\n var iframe = document.getElementById('Iframe');\n response = iframe.contentWindow.document.body.innerHTML;\n processResponse( response );\n}\n \n}}}
! :: Rich Application Processing Model ::\n[img[transportlayer.jpg]]\n!Transport Layer\n*Spans divide between client (above) and server (below)\n**includes request/response packaging interface\n**depending on transport may extend deeper to encoding layer
!~XMLHttpRequest\n*Created by Microsoft for Outlook Web Access\n*Internet Explorer 5\n*~ActiveX Object\n**only IE until Mozilla 1.0 release in 2002\n\n!Macromedia Flash\n*generally built as self-contained browser-hosted apps\n*seen as external dependency\n**wide deployment across main browsers\n**no fringe browser support\n*later Flash remoting\n**~ColdFusion backend
!References\n[[DotVoid|http://dotvoid.com/view.php?id=13]] : [[AjaxPatterns|http://ajaxpatterns.org/On-Demand_Javascript]] \n\n!Features\n*create a script tag, set its src attribute\n*server returns javascript to execute\n\n!Pros\n*no Same Origin restriction\n*code executes without explicit callback\n\n!Cons\n*limited to returning Javascript\n\n!Code\n{{{\nfunction doOnDemandJS( url ) {\n var head = document.getElementsByTagName('head').item(0);\n var old = document.getElementById('OnDemandJS');\n if (old) head.removeChild(old);\n\n script = document.createElement('script');\n script.src = url;\n script.type = 'text/javascript';\n script.defer = true;\n script.id = 'OnDemandJS';\n void(head.appendChild(script));\n}\n}}}\n!Example\n[[del.icio.us bookmarks service|http://del.icio.us/help/json]]\n*uses JSON to create bookmarks object\n
!Actionscript Objects\n[[XMLSocket|http://www.macromedia.com/support/flash/action_scripts/actionscript_dictionary/actionscript_dictionary860.html]]\n*Since Flash 5\n*XML encoding\n\n[[flex.net.socket|http://livedocs.macromedia.com/flex/2/langref/flash/net/Socket.html]]\n*Flash 8.5 / Flex 2.0\n*Raw TCP/IP socket\n\n!Javascript Helpers\nControl Flash from JS: [[AFLAX|http://www.aflax.org/]] \n\nControl JS from flash: [[Flex/Ajax Bridge|http://labs.macromedia.com/wiki/index.php/Flex_Framework:FABridge]]\n \n[[Flash4Ajax|http://blog.monstuff.com/archives/000280.html]]\n!Pros\n*integrates with Flash ui components\n*wide distribution\n*persistent TCP connection\n\n!Cons\n*plugin dependency\n*custom server\n*port > 1024\n*same-domain\n**mitigated by crossdomain.xml override\n***[[security caveats|http://shiflett.org/archive/263]] (use separate API domain)\n!Examples\n*[[AFLAX Demos|http://www.aflax.org/demos.htm]]\n*[[FABridge Sample App|http://flexapps.macromedia.com/flex2beta2/fabridge/samples/FABridgeSample.html]]\n\n
!References\n[[Ajax Patterns|http://ajaxpatterns.org/HTTP_Streaming]] : [[Alex Russell introduces Comet|http://alex.dojotoolkit.org/?p=545]] : [[Phil Windley on Comet|http://www.irishdev.com/NewsArticle.aspx?id=2173]]\n\n!Features\n*constantly open http connection\n*server push\n\n!Pros\n*low latency\n*event-based server push\n\n!Cons\n*client 2 connection limit\n*server resources\n**migitate by reconnecting per message\n*pragmatically requires custom server component\n**[[CometD|http://www.cometd.com/]]\n**[[LightStreamer|http://www.lightstreamer.com/]]\n**[[PHP Cometd implementation|http://www.phpclasses.org/blog/post/58-Responsive-AJAX-applications-with-COMET.html]]\n\n!Target\n*chat\n*realtime event monitoring\n\n!Code\n*see [[Ajax Patterns|http://ajaxpatterns.org/HTTP_Streaming]]\n\n
!!!Get this presentation at: http://www.ashleyit.com/ajax/transports.htm\n\n![[Brent Ashley|http://www.ashleyit.com]]\n*consultant, scripting specialist\n*long history promoting web remoting\n\n!Overview\nThe universal acceptance of the Ajax meme only became possible after more than 7 years of evolution and convergence of tools and techniques. Much of the evolution surrounded the transport layer, and there's still some change to come. I'm going to help you understand the issues that have driven the evolution so far and prepare you for future directions.\n\n!Agenda\n*History\n**how browsers and web apps have evolved\n**how and why different background transports have been tried along the way\n**how Ajax came to be the solution that stuck\n*Transport Layer\n**what challenges you need to understand when choosing a transport\n**What transports are available\n***How they work\n***Pros, Cons\n***Examples and code\n**Simple multi-transport app\n*Where to from here?\n**Now\n**Future\n\n
!Community Collaboration\n*microsoft.public.scripting.remote and other newsgroups\n*geeky sites then later blogs\n\n!Frameset\n*wrap app in frameset\n**scripted communication between frames\n\n![[IFrame]] \n*[[JSRS|http://www.ashleyit.com/rs/jsrs/test.htm]] (2000) \n**Cross-browser\n**multiple server e