externalinterface - 从SWF调用javascript

时间:2009-05-19 16:10:29

标签: flex externalinterface

HI,

我尝试从我的动作脚本代码中调用javascript函数,但它无效;

AS3:

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

js(使用swfobject的内部速度文件)

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

任何人都知道会发生什么?

2 个答案:

答案 0 :(得分:7)

如果您尝试从Flex应用程序中调用JS函数,则需要使用ExternalInterface.call(...)而不是ExternalInterface.addCallback(...)。来自文档:

  

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

     

调用Flash Player容器公开的函数,传递零个或多个参数。如果该函数不可用,则调用返回null;否则它返回函数提供的值。 Opera或Netscape浏览器不允许递归;在这些浏览器上,递归调用会产生空响应。 (Internet Explorer和Firefox浏览器支持递归。)

     

如果容器是HTML页面,则此方法在脚本元素中调用JavaScript函数。

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

如果要将Flash应用程序中的ActionScript函数公开给HTML容器,则可以使用

addCallback(),以便可以通过JavaScript调用它。

答案 1 :(得分:0)

在本地系统上,SWF和Javascript之间的通信往往受到安全问题的阻碍。您可以通过“设置管理器”重新配置闪存以允许其中一些通信。

在嵌入flash对象的地方没有设置“allowscriptacces”也可能是一个问题。

另一个问题可能是flash在加载javascript之前尝试调用javascript。初始订单可能非常烦人。