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

时间:2011-09-10 05:32:07

标签: javascript actionscript-3 actionscript

我正在尝试使用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;
    }

2 个答案:

答案 0 :(得分:4)

我不确定你的应用程序的扩展但是你的addCallback函数参数混淆了..

请参阅the doc,第一个参数是您要为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问题或任何其他闪存问题非常有用 - 请参阅ExternalInterface.call函数)

答案 1 :(得分:0)

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

AS代码:

 ExternalInterface.addCallback("sndToAS",rcvdFmJS);
    function rcvdFmJS(val){
       if (val == "pause"){
      audioPause();
       }
    }

JS代码:

    document.getElementById("movie").sndToAS("pause");