[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