【问题标题】:ExternalInterface.addCallback for as3 doesn't workas3 的 ExternalInterface.addCallback 不起作用
【发布时间】:2011-03-17 17:26:55
【问题描述】:

我想从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)。

怎么了?

【问题讨论】:

  • 但是 obj 没有 PlaySound() 方法(obj 不为空)。 -> 这是什么意思?您是否尝试过在您的 as3 PlaySound 方法中跟踪某些内容?
  • 这意味着,JavaScript 对象 obj 没有方法 PlaySound。但是 obj 不是 null - 所以,函数 thisMovie 是正确的。我找到了解决方案,请参阅下一个答案。谢谢。

标签: javascript flash actionscript-3 externalinterface


【解决方案1】:

我用它来查找电影。它似乎更可靠:

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

我还发现从本地文件系统运行时 ExternalInterface 无法正常工作。您是否尝试过从网络服务器运行它?

您也有可能看到竞争条件...也许您正试图在 PlaySound 注册为回调之前调用它。如果您在拨打电话前稍等片刻会发生什么?

【讨论】:

  • 是的,当我尝试从网络服务器而不是本地文件系统运行它时,它可以工作。谢谢。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2010-12-13
    • 1970-01-01
    • 2011-11-14
    • 2012-08-23
    • 1970-01-01
    • 1970-01-01
    • 2015-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多