[Laszlo-dev] suggested improvement for loadJS in SWF9 runtime
Raju Bitter
rajubitter at me.com
Tue Nov 10 02:36:27 PST 2009
It calls DojoExternalInterface.call.apply(), which is a file from
Dojo. Based on the comment in that file it's a wrapper around Flash8
ExternalInterface, but I guess the comment is not up to date. Max?
http://svn.openlaszlo.org/openlaszlo/trunk/WEB-INF/lps/lfc/kernel/swf9/LzBrowserKernel.lzs
> /**
> * Runs a Javascript method in the browser, returning the result
> * @keywords flashspecific
> */
> static function callJS (...args) :* {
> var js:String = args[0];// String js: Browser javascript to
> execute
> var callback:* = args[1];
> //DojoExternalInterface.call.apply(null, args);
> if (LzBrowserKernel.jsready != true) {
> LzBrowserKernel.__jslocked = true;
> }
> if (LzBrowserKernel.__jslocked == true) {
> if (callback != false) {
> var o:Array = [];
> for (var i:int = 0; i < args.length; i++) {
> o[i] = args[i];
> }
> LzBrowserKernel.__jscallq.push(o);
> //Debug.write('queued',
> LzBrowserKernel.__jscallq.length, o);
> }
> return null;
> }
>
> LzBrowserKernel.__jscallback = callback;
>
> args[1] = LzBrowserKernel.callJSReturn;
>
> //LzBrowserKernel.__jslocked = true;
> //Debug.write('calling with args real', args);
> DojoExternalInterface.call.apply(null, args);
>
> if (callback == false) {
> LzBrowserKernel._dequeueJS();
> }
> return null;
> }
http://svn.openlaszlo.org/openlaszlo/trunk/WEB-INF/lps/lfc/kernel/swf9/DojoExternalInterface.as
> function call(...args) :void {
> var methodName:String = args[0];
> var resultsCallback:Function = args[1];
>
> var parameters:Array = [];
> for(var i:int = 0; i < args.length; i++){
> if(i != 1){ // skip the callback
> parameters.push(args[i]);
> }
> }
>
> // we might have any number of optional arguments, so we
> have to
> // pass them in dynamically; strip out the results callback
> //Debug.write('Calling', parameters);
> var results:* = ExternalInterface.call.apply(null,
> parameters);
>
> // immediately give the results back, since
> ExternalInterface is
> // synchronous
> if(resultsCallback != null && typeof resultsCallback !=
> "undefined"){
> resultsCallback.call(null, results);
> }
> }
On Nov 10, 2009, at 4:39 AM, Henry Minsky wrote:
> Did you try the callJS method? I believe it uses the
> ExternalInterface calls.
>
> On Mon, Nov 9, 2009 at 10:12 PM, Chris Kohlhardt <chrisk at gliffy.com>
> wrote:
> Hey there. It's been a while. :)
>
> We're migrating our massive laszlo application to SWF9. We do
> several javascript calls in our app, and I was having issues calling
> lz.Browser.loadJS() several times in a row. Basically, not all the
> calls were making it through to the browser's javascript.
>
> Anyway, after much trial and error, I discovered that as3 has
> ExternalInterface.call() for this purpose, and sure enough, using
> this native call directly works.
>
> So.... not sure if this is the right place to suggest this, but you
> might consider updating loadJS() in kernel/swf9/LzBrowserKernel.lzs
> with ExternalInterface.call().
>
> -chris
>
>
>
> --
> Henry Minsky
> Software Architect
> hminsky at laszlosystems.com
>
>
More information about the Laszlo-dev
mailing list