【问题标题】:AS3 - ExternalInterface.addCallback, Access of undefined propertyAS3 - ExternalInterface.addCallback,未定义属性的访问
【发布时间】:2011-11-14 06:04:08
【问题描述】:

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

【问题讨论】:

  • 我希望能够在单击 HTML 按钮时从 javascript 函数 returnVar3 运行 AS 函数“pauseMusic”。当我将 addCallback 添加到 AS 时,我得到一个错误
  • 你能粘贴pauseMusic和song4函数吗?
  • 抱歉,打错了。应该是song3函数。我只想能够单击 HTML 并运行 AS3 代码。我可能做错了。
  • evt:MouseEvent 是什么?你应该删除它。

标签: javascript actionscript-3 actionscript


【解决方案1】:

我不确定您的应用程序的扩展,但您的 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 函数)

【讨论】:

  • 谢谢本,这很有意义。我对这方面还比较陌生,我边走边学。我切换了参数,现在我在导出时遇到了同样的错误。我已经修改了我的新暂停/外部代码。如果我只想让这个函数监听 javascript,我会传入什么参数?
  • 发生这种情况是因为 ExternalInterface 不在函数内部吗?
  • @user547794。我不确定,我真的不知道你项目的其余部分。我建议你用一个简单的外部接口做一个测试项目,并尝试让它工作——也许是输出从 JS 传递到 Flash 文本字段的字符串或类似的东西......一旦工作,尝试应用将其添加到您更大的项目中。
【解决方案2】:

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

AS 代码:

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

JS 代码:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-29
    • 2012-02-22
    • 2021-08-17
    • 2015-01-13
    • 2015-01-12
    • 2013-07-12
    • 1970-01-01
    相关资源
    最近更新 更多