externalinterface - calling javascript from SWF

点点圈 提交于 2019-12-11 19:36:21

问题


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?


回答1:


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.




回答2:


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.



来源:https://stackoverflow.com/questions/883680/externalinterface-calling-javascript-from-swf

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!