as3的ExternalInterface.addCallback不起作用

时间:2011-03-17 09:19:10

标签: javascript flash actionscript-3 externalinterface

我想从JS调用AS函数。

我有以下ActionScript 3代码:

package  {
    import flash.display.*;
    import flash.events.*;
    import flash.system.*;
    import flash.external.ExternalInterface;
    public class Main extends Sprite {
        public function Main() 
        {
            ExternalInterface.addCallback("PlaySound", PlaySound);
        }
        public function PlaySound():void
        {

        }
    }
}

我需要从JavaScript调用函数PlaySound()。我试着用以下方式做到这一点:

function thisMovie(movieName) {
   if (navigator.appName.indexOf("Microsoft") != -1) {
        return window[movieName];
   } else {
        return document[movieName];
   }
}

function m()
{
  var obj=thisMovie("Main");
  obj.PlaySound();
}

但是obj没有方法PlaySound()(obj不是null)。

怎么了?

2 个答案:

答案 0 :(得分:3)

我用这个来找电影。它看起来更可靠:

function thisMovie(movieName) {
    var movie;
    try
    {
        movie = document[movieName];
        movie = (movie == null) ? window[movieName] : movie;        
    }
    catch (e)
    {
        return null;
    }
    return movie;
}

我还发现从本地文件系统运行时,ExternalInterface无法正常工作。你试过从网络服务器上运行它吗?

你也可能会看到竞争条件......也许你正试图在PlaySound注册为回调之前调用它。如果你在打电话之前稍微等一下会怎么样?

答案 1 :(得分:0)

我认为问题是当您尝试从JS调用SWF文件时尚未加载。