views:

1595

answers:

2

HI,

im trying to call a javascript function from my actionscript code but its not working;

as3:

if (ExternalInterface.available)
  {
  try
  {
    ExternalInterface.addCallback("changeDocumentTitle",null);
  } 
  catch(error:Error)

js (inside velocity file using swfobject)

function changeDocumentTitle() 
    {
        alert('call from SWF');
    }

anyone know what could be happenin?

A: 

On the local system, communication between the SWF and Javascript tends to be hampered by security issues. You can reconfigure your flash to allow some of these communications via the "settings manager".

It may also be an issue with "allowscriptacces" not being set where you embed the flash object.

Another problem may be that flash tries to call javascript before the javascript is loaded. The init order thing can be quite annoying.

Matthias Wandel
+5  A: 

If you are trying to invoke a JS function from within your Flex app, you want to use ExternalInterface.call(...) and not ExternalInterface.addCallback(...). From the docs:

public static function call(functionName:String, ... arguments):*

Calls a function exposed by the Flash Player container, passing zero or more arguments. If the function is not available, the call returns null; otherwise it returns the value provided by the function. Recursion is not permitted on Opera or Netscape browsers; on these browsers a recursive call produces a null response. (Recursion is supported on Internet Explorer and Firefox browsers.)

If the container is an HTML page, this method invokes a JavaScript function in a script element.

http://livedocs.adobe.com/flex/3/langref/flash/external/ExternalInterface.html

addCallback() is used if you want to expose an ActionScript function from your Flash app to the HTML container so that it can be invoked via JavaScript.

cliff.meyers
hah, i can't believe i missed that when reading the question.
quoo