AS3 - ExternalInterface.访问未定义的属性

AS3 - ExternalInterface.addCallback, Access of undefined property

本文关键字:属性 未定义 访问 ExternalInterface AS3      更新时间:2023-09-26

我正在尝试使用javascript来运行AS3函数。当我试图编译时,我得到一个"未定义属性的访问"错误消息。

我在网上读了一些关于这个的东西,但我仍然不理解它。我想让flash文件始终监听javascript

以下是我的AS3代码:
ExternalInterface.addCallback("song4", PauseMusicExt);

和我的Javascript &HTML:

 function returnVar3(song3) { return this[song3]; }
  <input type="submit" name="playButton" id="playButton" value="Submit" onClick="returnVar('song3')"/>

编辑:这里是pauseMusic函数:

function pauseMusicExt():void
    {
        songPosition = channel.position;
        channelSilence.stop();
        channel.stop();
        channel2.stop();
        btnPlay.mouseEnabled = true;
    }

我不确定你的应用程序的扩展,但你已经得到了你的addCallback函数参数混合…

请参阅文档,第一个参数是您想要将函数暴露给javascript的名称,第二个参数是您想要触发的实际内部AS3函数。

所以声明应该像这样:

ExternalInterface。addCallback("song4 pauseMusic);

(假设你的函数和你调用addCallback的函数在同一个作用域中)

该语句将创建一个"song4"方法,你可以在flash dom对象上调用该方法

var fl = document.getElementById('myflashobject');
fl.song4()

之后的问题是,pauseMusic需要一个参数(看起来你已经把它变成了一个鼠标事件处理程序)。您可能希望有一个干净的方法,它不需要像内部as3事件参数那样的参数。重写pauseMusic,使它不需要它(您可能需要创建另一个方法来内部处理鼠标事件-像onPause(evt:MouseEvent),然后调用pauseMusic。

编辑:我不知道是否有很多人想过这样做,但你也可以完全使用外部接口调用firebug的console.log函数从flash向firebug发送消息(这对于调试ExternalInterface问题或任何其他flash问题非常有帮助-参见ExternalInterface。调用函数)

希望你想暂停音频播放器。

AS代码:

 ExternalInterface.addCallback("sndToAS",rcvdFmJS);
    function rcvdFmJS(val){
       if (val == "pause"){
      audioPause();
       }
    }
JS代码:
    document.getElementById("movie").sndToAS("pause");