1

Flash Player 的烦恼之一是播放器——一旦它获得焦点——会阻止某些关键事件被传递到浏览器。特别是用于重新加载页面或重新编译应用程序的 F5 功能键。因此,在按 F5 之前,您必须在 SWF 影片区域之外单击浏览器才能重新获得焦点。

F5 键如何仍然与 SWF 运行时应用程序一起使用来重新编译和重新加载 SWF 运行时应用程序?

4

1 回答 1

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.ACTIVATEEvent.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.Browseronselect 处理程序通过使用对象触发重新加载当前页面。键盘命令仅对 ActionScript 3 运行时有效。现在,当您在 SWF 运行时测试或开发应用程序时,只需按 F5 即可重新加载,就像在 DHTML 运行时一样。

于 2012-10-17T22:29:33.420 回答