[Laszlo-checkins] r13200 - in openlaszlo/trunk/WEB-INF/lps: lfc lfc/kernel/swf9 server/src/org/openlaszlo/compiler

max@openlaszlo.org max at openlaszlo.org
Fri Mar 6 07:17:37 PST 2009


Author: max
Date: 2009-03-06 07:17:33 -0800 (Fri, 06 Mar 2009)
New Revision: 13200

Modified:
   openlaszlo/trunk/WEB-INF/lps/lfc/kernel/swf9/LzPreloader.as
   openlaszlo/trunk/WEB-INF/lps/lfc/lzpreloader.as
   openlaszlo/trunk/WEB-INF/lps/server/src/org/openlaszlo/compiler/SWF9Writer.java
Log:
Change 20090305-maxcarlson-l by maxcarlson at Bank.local on 2009-03-05 20:10:53 PST
    in /Users/maxcarlson/openlaszlo/trunk-clean
    for http://svn.openlaszlo.org/openlaszlo/trunk

Summary: Fix load progress updates for swf 8 and 9 to not cause 'clicking' in IE

Bugs Fixed: LPP-7737 -  IE "Click Sounds" problem when loading

Technical Reviewer: promanik
QA Reviewer: mohammad at zeineddin.name

Details: LzPreloader, lzpreloader - Update to use ExternalInterface calls instead of loading URLs.

SWF9Writer - Update to include code from LzPreloader.

Tests: Modified WEB-INF/lps/templates/html-response.xslt#onloadstatus() method to show load progress information, to verify updates are being sent for swf8/9.  Used fiddler proxy under windows with 'simulate modem speed' script to verify there is no more clicking in IE even for slow downloads.



Modified: openlaszlo/trunk/WEB-INF/lps/lfc/kernel/swf9/LzPreloader.as
===================================================================
--- openlaszlo/trunk/WEB-INF/lps/lfc/kernel/swf9/LzPreloader.as	2009-03-06 12:05:05 UTC (rev 13199)
+++ openlaszlo/trunk/WEB-INF/lps/lfc/kernel/swf9/LzPreloader.as	2009-03-06 15:17:33 UTC (rev 13200)
@@ -1,7 +1,7 @@
 /**
   * LzSprite.as
   *
-  * @copyright Copyright 2007, 2008 Laszlo Systems, Inc.  All Rights Reserved.
+  * @copyright Copyright 2007-2009 Laszlo Systems, Inc.  All Rights Reserved.
   *            Use is subject to license terms.
   *
   * based on http://www.ghost23.de/blogarchive/2008/04/as3-application-1.html
@@ -18,7 +18,9 @@
     import flash.events.ProgressEvent;
     import flash.net.navigateToURL;
     import flash.net.URLRequest;
+    import flash.external.ExternalInterface;
 
+    // WARNING: this file is not included automatically - be sure to keep server/src/org/openlaszlo/sc/SWF9External.java in sync!!!!
     public class LzPreloader extends MovieClip {
         public function LzPreloader() {
             stop();
@@ -46,8 +48,7 @@
             var percload:Number = Math.floor(root.loaderInfo.bytesLoaded / root.loaderInfo.bytesTotal * 100);
             var id = stage.loaderInfo.parameters.id;
             if (id) {
-                var js = 'if (window.lz && lz.embed && lz.embed.applications && lz.embed.applications.' + id + ') lz.embed.applications.' + id + '._sendPercLoad(' + percload + ')';
-                navigateToURL(new URLRequest('javascript:' + js + ';void(0);'), '_self');
+                ExternalInterface.call('lz.embed.applications.' + id + '._sendPercLoad', percload);
             }
         }
     }

Modified: openlaszlo/trunk/WEB-INF/lps/lfc/lzpreloader.as
===================================================================
--- openlaszlo/trunk/WEB-INF/lps/lfc/lzpreloader.as	2009-03-06 12:05:05 UTC (rev 13199)
+++ openlaszlo/trunk/WEB-INF/lps/lfc/lzpreloader.as	2009-03-06 15:17:33 UTC (rev 13200)
@@ -1,6 +1,6 @@
 /**
   *
-  * @copyright Copyright 2001-2008 Laszlo Systems, Inc.  All Rights Reserved.
+  * @copyright Copyright 2001-2009 Laszlo Systems, Inc.  All Rights Reserved.
   *            Use is subject to license terms.
   *
   * @affects lzpreloader
@@ -141,11 +141,11 @@
     mc.gotoAndStop(0);
   } else {
     // SWF-specific
-    var percload = _root.getBytesLoaded() / _root.getBytesTotal();
     var id = _root.id;
     if (id) {
-        var js = 'if (window.lz && lz.embed && lz.embed.applications && lz.embed.applications.' + id + ') lz.embed.applications.' + id + '._sendPercLoad(' + Math.floor(percload * 100) + ')';
-        _root.getURL('javascript:' + js + ';void(0);');
+        var percload = Math.floor((_root.getBytesLoaded() / _root.getBytesTotal()) * 100);
+        if (percload != this._lastpercload) flash.external.ExternalInterface.call("lz.embed.applications." + id + "._sendPercLoad", percload);
+        this._lastpercload = percload;
     }
 
     for (var i = 0; i < this.synctoloads.length; i++) {

Modified: openlaszlo/trunk/WEB-INF/lps/server/src/org/openlaszlo/compiler/SWF9Writer.java
===================================================================
--- openlaszlo/trunk/WEB-INF/lps/server/src/org/openlaszlo/compiler/SWF9Writer.java	2009-03-06 12:05:05 UTC (rev 13199)
+++ openlaszlo/trunk/WEB-INF/lps/server/src/org/openlaszlo/compiler/SWF9Writer.java	2009-03-06 15:17:33 UTC (rev 13200)
@@ -465,6 +465,7 @@
             "import flash.system.*;\n" +
             "import flash.net.*;\n" +
             "import flash.ui.*;\n" +
+            "import flash.external.*;\n" +
             "}#\n";
 
     /** Create application boilerplate preamble as3 code 
@@ -483,8 +484,10 @@
                 "app = new " + MAIN_APP_CLASSNAME + "(this);\n" +
               "}\n" +
             "}\n";
-        // preloader code from kernel/swf9/LzPreloader.as -- eeek should come from extern file, maybe with JSP interpolation.
-        source += "// based on http://www.ghost23.de/blogarchive/2008/04/as3-application-1.html\n public class LzPreloader extends MovieClip {" + imports + "public function LzPreloader() { stop(); root.loaderInfo.addEventListener(ProgressEvent.PROGRESS,loadProgress); addEventListener(Event.ENTER_FRAME, enterFrame); } public function enterFrame(event:Event):void { if (framesLoaded == totalFrames) { root.loaderInfo.removeEventListener(ProgressEvent.PROGRESS,loadProgress); nextFrame(); var mainClass:Class = Class(loaderInfo.applicationDomain.getDefinition('LzSpriteApplication')); if(mainClass) { var main:DisplayObject = DisplayObject(new mainClass()); if (main) { removeEventListener(Event.ENTER_FRAME, enterFrame); stage.addChild(main); stage.removeChild(this); } } } } private function loadProgress(event:Event):void { var percload:Number = Math.floor(root.loaderInfo.bytesLoaded / root.loaderInfo.bytesTotal * 100); var id = stage.loaderInfo.parameters.id; if (id) { var js = 'if (window.lz && lz.embed && lz.embed.applications && lz.embed.applications.' + id + ') lz.embed.applications.' + id + '._sendPercLoad(' + percload + ')'; navigateToURL(new URLRequest('javascript:' + js + ';void(0);'), '_self'); } } } // end of preloader\n";
+        // TODO: should come from extern file, maybe with JSP interpolation
+        // preloader code from kernel/swf9/LzPreloader.as
+        // BE SURE TO KEEP THIS IN SYNC
+        source += "// based on http://www.ghost23.de/blogarchive/2008/04/as3-application-1.html\n public class LzPreloader extends MovieClip {" + imports + "public function LzPreloader() { stop(); root.loaderInfo.addEventListener(ProgressEvent.PROGRESS,loadProgress); addEventListener(Event.ENTER_FRAME, enterFrame); } public function enterFrame(event:Event):void { if (framesLoaded == totalFrames) { root.loaderInfo.removeEventListener(ProgressEvent.PROGRESS,loadProgress); nextFrame(); var mainClass:Class = Class(loaderInfo.applicationDomain.getDefinition('LzSpriteApplication')); if(mainClass) { var main:DisplayObject = DisplayObject(new mainClass()); if (main) { removeEventListener(Event.ENTER_FRAME, enterFrame); stage.addChild(main); stage.removeChild(this); } } } } private function loadProgress(event:Event):void { var percload:Number = Math.floor(root.loaderInfo.bytesLoaded / root.loaderInfo.bytesTotal * 100); var id = stage.loaderInfo.parameters.id; if (id) { ExternalInterface.call('lz.embed.applications.' + id + '._sendPercLoad', percload); } } } // end of preloader\n";
         return source;
     }
 



More information about the Laszlo-checkins mailing list