[Laszlo-dev] swf9 ExternalInterface.addCallback

Sarah Allen sarah at ultrasaurus.com
Sun Jun 21 08:38:50 PDT 2009


Any interest in collaborating on how to add that to openlaszlo_plugin  
for rails?  or give me a hint as to where to start? (oddly I know next  
to nothing about the lz.embed code and how to integrate it onto a page  
of my own... must be in the dguide somewhere, I suppose)

I got the tests working in the lastest rails (and older 2.x should  
work too) and added a bunch of tests for the applet and swfobject  
tags. Oliver hasn't pulled yet, so the latest is at:
      http://github.com/ultrasaurus/openlaszlo_plugin/tree/master

On Jun 21, 2009, at 8:26 AM, Max Carlson wrote:

> You'd use:
>
> value = lz.embed.lzapp.callMethod('canvas.anyMethod(...)')
>
> > Also, do I need all the lz embed stuff to do this?  I was just using
> > swfobject_tag in rails...  and then I would just call the method  
> on the
> > object in javascript.
>
> Yes, you will need the lz.embed stuff.  It has lots of other  
> benefits, like history and mousewheel support.
>
> Sarah Allen wrote:
>> Can I just declare a method on the canvas and call it with:
>> value =  
>> lz.embed.lzapp.callMethod('globalreference.canvas.anyMethod(...)')
>> Also, do I need all the lz embed stuff to do this?  I was just  
>> using swfobject_tag in rails...  and then I would just call the  
>> method on the object in javascript.
>> Sarah
>> On Jun 20, 2009, at 12:59 PM, Max Carlson wrote:
>>> It just means you need a top-level instance with an ID.  You can  
>>> do this in a script if you want to...
>>>
>>> Sarah Allen wrote:
>>>> What does this mean:  "You can call any available method in the  
>>>> application as long as 'globalreference' can be found in the  
>>>> global scope." ?
>>>> Do I need to define "globalreference" in a script tag?
>>>> Thanks,
>>>> Sarah
>>>> On Jun 19, 2009, at 1:20 PM, Max Carlson wrote:
>>>>> Yes!  See the docs for any app with lzt=deployment, e.g.:
>>>>> http://labs.openlaszlo.org/trunk-nightly/my-apps/copy-of-hello.lzx?lzt=deployment
>>>>>
>>>>> To call a method in an application, use:
>>>>>
>>>>> value =  
>>>>> lz 
>>>>> .embed 
>>>>> .lzapp.callMethod('globalreference.reference.anyMethod(...)')
>>>>>
>>>>> passing a string representation of the method and any arguments  
>>>>> you wish to pass. You can call any available method in the  
>>>>> application as long as 'globalreference' can be found in the  
>>>>> global scope.
>>>>>
>>>>> To call a method in all applications on the page, use:
>>>>>
>>>>> lz.embed.callMethod('globalreference.reference.anyMethod(...)')
>>>>>
>>>>> Sarah Allen wrote:
>>>>>> So, is there any native-LZX way to do this?  or is the Flash  
>>>>>> API the best I can do for now?
>>>>>> Thanks!
>>>>>> Sarah
>>>>>> On Jun 12, 2009, at 10:12 AM, Henry Minsky wrote:
>>>>>>> You're looking at out of date docs, the new docs say it has  
>>>>>>> two args.
>>>>>>>
>>>>>>> See the docs at http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/
>>>>>>>
>>>>>>> addCallback    ()    method
>>>>>>>
>>>>>>> | public static function addCallback(functionName:String <http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/String.html 
>>>>>>> >, closure:Function <http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/Function.html 
>>>>>>> >):void <http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/specialTypes.html#void 
>>>>>>> >|
>>>>>>> * Language Version : *    ActionScript 3.0
>>>>>>>
>>>>>>> * Runtime Versions : *    AIR 1.0, Flash Player 9
>>>>>>>
>>>>>>> Registers an ActionScript method as callable from the  
>>>>>>> container. After a successful invocation of |addCallBack()|,  
>>>>>>> the registered function in Flash Player can be called by  
>>>>>>> JavaScript or ActiveX code in the container.
>>>>>>>
>>>>>>> *Note:* For /local/ content running in a browser, calls to the  
>>>>>>> |ExternalInterface.addCallback()| method work only if the SWF  
>>>>>>> file and the containing web page are in the local-trusted  
>>>>>>> security sandbox. For more information, see the following:
>>>>>>>
>>>>>>>  * The security chapter
>>>>>>>    <http://www.adobe.com/go/flashCS3_progAS3_security> in the
>>>>>>>    /Programming ActionScript 3.0/ book and the latest comments  
>>>>>>> on
>>>>>>>    LiveDocs
>>>>>>>  * The Flash Player 9 Security white paper
>>>>>>>    <http://www.adobe.com/go/fp9_0_security>
>>>>>>>
>>>>>>> Parameters
>>>>>>>
>>>>>>>
>>>>>>>   |functionName:String <http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/String.html 
>>>>>>> >| — The name by which the container can invoke the function.
>>>>>>>
>>>>>>>   |closure:Function <http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/Function.html 
>>>>>>> >| — The function closure to invoke. This could be a free- 
>>>>>>> standing function, or it could be a method closure referencing  
>>>>>>> a method of an object instance. By passing a method closure,  
>>>>>>> you can direct the callback at a method of a particular object  
>>>>>>> instance.
>>>>>>>
>>>>>>>
>>>>>>> Throws
>>>>>>>
>>>>>>>   |Error <http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/Error.html 
>>>>>>> > | — The container does not support incoming calls. Incoming  
>>>>>>> calls are supported only in Internet Explorer for Windows and  
>>>>>>> browsers that use the NPRuntime API such as Mozilla 1.7.5 and  
>>>>>>> later or Firefox 1.0 and later.
>>>>>>>
>>>>>>>   |SecurityError <http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/SecurityError.html 
>>>>>>> > | — A callback with the specified name has already been  
>>>>>>> added by ActionScript in a sandbox to which you do not have  
>>>>>>> access; you cannot overwrite that callback. To work around  
>>>>>>> this problem, rewrite the ActionScript that originally called  
>>>>>>> the |addCallback()| method so that it also calls the | 
>>>>>>> Security.allowDomain()| method.
>>>>>>>
>>>>>>>   |SecurityError <http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/SecurityError.html 
>>>>>>> > | — The containing environment belongs to a security sandbox  
>>>>>>> to which the calling code does not have access. To fix this  
>>>>>>> problem, follow these steps:
>>>>>>>
>>>>>>> 1. In the |object| tag for the SWF file in the containing HTML
>>>>>>>    page, set the following parameter:
>>>>>>>
>>>>>>>    |<param name="allowScriptAccess" value="always" />|
>>>>>>>
>>>>>>> 2. In the SWF file, add the following ActionScript:
>>>>>>>
>>>>>>>    |flash.system.Security.allowDomain(/sourceDomain/)|
>>>>>>>
>>>>>>> See also
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Fri, Jun 12, 2009 at 12:51 PM, Sarah Allen <sarah at ultrasaurus.com 
>>>>>>>  <mailto:sarah at ultrasaurus.com>> wrote:
>>>>>>>
>>>>>>>  I'm seeing a weird compiler error in trunk... might be recent
>>>>>>>  regression (it is possible, but unlikely that I somehow left  
>>>>>>> this
>>>>>>>  code in a state that had a compiler error a couple of months  
>>>>>>> ago
>>>>>>>  when I last looked at this app)  I'll be looking at this  
>>>>>>> more, but
>>>>>>>  I wanted to send a note in case anyone else is seeing something
>>>>>>>  similar or has any ideas.
>>>>>>>
>>>>>>>  org.openlaszlo.sc.CompilerError: main.lzx: 41: Error: Incorrect
>>>>>>>  number of arguments. Expected no more than 2, in line:
>>>>>>>  flash.external.ExternalInterface.addCallback("playMedia", null,
>>>>>>>  playMedia)
>>>>>>>
>>>>>>>  The Flash docs indicate that there are three arguments:
>>>>>>>  http://livedocs.adobe.com/flash/9.0/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00001653.html
>>>>>>>  <http://livedocs.adobe.com/flash/9.0/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00001653.html 
>>>>>>> >
>>>>>>>
>>>>>>>  Also, is there any LZX-native way that I should be making this
>>>>>>>  call instead of devolving into calling Flash directly?
>>>>>>>
>>>>>>>  Thanks in advance,
>>>>>>>  Sarah
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> -- 
>>>>>>> Henry Minsky
>>>>>>> Software Architect
>>>>>>> hminsky at laszlosystems.com <mailto:hminsky at laszlosystems.com>
>>>>>>>
>>>>>>>
>>>>>> http://www.ultrasaurus.com
>>>>>
>>>>> -- 
>>>>> Regards,
>>>>> Max Carlson
>>>>> OpenLaszlo.org
>>>> http://www.ultrasaurus.com
>>>
>>> -- 
>>> Regards,
>>> Max Carlson
>>> OpenLaszlo.org
>> http://www.ultrasaurus.com
>
> -- 
> Regards,
> Max Carlson
> OpenLaszlo.org

http://www.ultrasaurus.com






More information about the Laszlo-dev mailing list