Flash Player的一个烦恼是播放器 - 一旦它具有焦点 - 阻止某些关键事件被传递到浏览器。特别是用于重新加载页面或重新编译应用程序的F5功能键。因此,在按F5之前,您必须在SWF电影区域外单击以使浏览器重新获得焦点。
如何将F5密钥与SWF运行时应用程序一起使用来重新编译和重新加载SWF运行时应用程序?
答案 0 :(得分:1)
对于所有基于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
事件。当Flash影片获得焦点时,将发送Event.ACTIVATE
事件。要通过按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>
onselect处理程序通过使用lz.Browser
对象触发重新加载当前页面。键命令仅对ActionScript 3运行时有效。现在,当您在SWF运行时中测试或开发应用程序时,只需按F5重新加载,就像在DHTML运行时中一样。