0

我是 Flash ActionScript 的新手。我有一个闪存录音机(修改后的jRecorder),它以 WAV 格式录制音频,并且我添加了对 MP3 编码的支持。记录器使用 ExternalInterface.callback() 为 JS 导出一些公共函数,并且还使用 Flash 容器(网站)中的 ExternalInterface.call() 调用 JS 回调。当从 JS 调用 flash 导出函数以开始录制/编码/其他函数时,flash 中的函数也会调用 JS 回调事件处理程序来处理事件,例如,recording_started、recording_stopped、encoding_started、encoding_ended 等。它在 IE、FF、Chrome 中运行良好但不是在歌剧中。

我在一个网络项目中使用它如下 -

-> 录制时间最长为 2 分钟,当用户停止(按钮)或达到时间限制时,录制将停止。对于这两种情况,都会触发“recording_stopped”事件,并在该事件处理程序中调用 mp3 编码函数(一个 flash 导出函数)。

-> 在这里,JS 事件处理程序由 flash 调用,并且在 tern 中调用 flash 导出函数。

问题是,在 opera 中,导出的 flash 函数没有在处理程序内部调用。如果在处理程序的末尾调用该函数,则执行该函数上方的所有代码,但不执行该函数,如果我将该函数放在处理程序的开头,则不会执行其下方的代码。并且控制台中没有显示 JS 错误。但是,如果我从不是 flash 的回调事件处理程序的 JS 函数中调用它,则该函数可以正常执行。

我已经在两台不同的计算机上测试了它,分别是 Opera 版本 11.51 和 12.15 以及 Flash 播放器版本 11.3、11.6 和 11.7。

我的opera版本是12.15,flash player版本是11.7(适用于所有浏览器)。

为什么会这样?

4

1 回答 1

0

我找到了一种在输入此问题时忽略此问题的方法。解决方案是,我不是直接从事件处理程序调用 flash 导出函数,而是使用 JS 的 window.setTimeout() 函数调用它,例如 -

window.setTimeout(function(){
    if($.jRecorder.encodeToMp3())
      isEncoding = true;                
}, 0);

我不确定为什么会这样。@Raptor 评论了这个问题的原因,可能是这个原因,也可能是其他原因。

于 2014-06-29T08:47:02.077 回答