Flash Player 的烦恼之一是播放器——一旦它获得焦点——会阻止某些关键事件被传递到浏览器。特别是用于重新加载页面或重新编译应用程序的 F5 功能键。因此,在按 F5 之前,您必须在 SWF 影片区域之外单击浏览器才能重新获得焦点。
F5 键如何仍然与 SWF 运行时应用程序一起使用来重新编译和重新加载 SWF 运行时应用程序?
Flash Player 的烦恼之一是播放器——一旦它获得焦点——会阻止某些关键事件被传递到浏览器。特别是用于重新加载页面或重新编译应用程序的 F5 功能键。因此,在按 F5 之前,您必须在 SWF 影片区域之外单击浏览器才能重新获得焦点。
F5 键如何仍然与 SWF 运行时应用程序一起使用来重新编译和重新加载 SWF 运行时应用程序?
对于所有基于 ActionScript 3 的运行时(SWF10、SWF11,...),以下代码将启用通过按 F5 重新加载 OpenLaszlo 应用程序。
<canvas>
<passthrough when="$as3">
import flash.events.Event;
</passthrough>
<handler name="oninit">
if ($as3) {
var sprite = this.getDisplayObject();
sprite.addEventListener(Event.ACTIVATE, onactivate)
sprite.addEventListener(Event.DEACTIVATE, ondeactivate);
}
</handler>
<method name="onactivate" args="e=null">
Debug.info('OpenLaszlo app is active, press F5 to reload');
</method>
<method name="ondeactivate" args="e=null">
Debug.info('OpenLaszlo SWF is inactive');
</method>
<switch><when property="$debug">
<!-- Reload SWF app when F5 is pressed -->
<command key="['f5']"
onselect="lz.Browser.callJS('document.location.reload(true)')"
active="$once{$as3}" />
</when></switch>
</canvas>
首先,我正在跟踪 Flash 电影的Event.ACTIVATE
和Event.DEACTIVATE
事件。Event.ACTIVATE
当 Flash 影片获得焦点时,将发送该事件。要通过按 F5 启用重新加载,需要<command />
添加一个标签 - 但仅当为应用程序启用了 $debug 时。
<switch><when property="$debug">
<!-- Reload SWF app when F5 is pressed -->
<command key="['f5']"
onselect="lz.Browser.callJS('document.location.reload(true)')"
active="$once{$as3}" />
</when></switch>
lz.Browser
onselect 处理程序通过使用对象触发重新加载当前页面。键盘命令仅对 ActionScript 3 运行时有效。现在,当您在 SWF 运行时测试或开发应用程序时,只需按 F5 即可重新加载,就像在 DHTML 运行时一样。