【发布时间】:2013-05-09 19:12:42
【问题描述】:
我是 Flash ActionScript 的新手。我有一个以 WAV 格式录制音频的闪存录音机(修改为 jRecorder),并且我添加了对 MP3 编码的支持。记录器使用 ExternalInterface.callback() 为 JS 导出一些公共函数,并且还使用 Flash 容器(网站)中的 ExternalInterface.call() 调用 JS 回调。当从 JS 调用 flash 导出函数以开始录制/编码/其他函数时,flash 中的函数也会调用 JS 回调事件处理程序来处理事件,例如,recording_started、recording_stopped、encoding_started、encoding_ended 等。它在 IE、FF、Chrome 中工作正常但不是在 Opera 中。
我在一个web项目中使用过如下-
-> 录制时间最长为 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(适用于所有浏览器)。
为什么会这样?
【问题讨论】:
-
@ShivanRaptor 您所说的两个链接与我的情况不同。首先,回调是由 flash 调用的,但它不会在回调中执行其导出的函数。其次,问题与我的不相似。
-
我认为重复的问题符合您的问题,因为 Opera 根本不执行
ExternalInterface.call。在 Opera 中通过此 ActionScript 方法调用的任何函数都会失败。
标签: javascript actionscript opera flash