[Laszlo-dev] swf9 ExternalInterface.addCallback

Sarah Allen sarah at ultrasaurus.com
Sat Jun 20 11:01:20 PDT 2009


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






More information about the Laszlo-dev mailing list