【问题标题】:How can I detect if a Flex app loses focus如何检测 Flex 应用程序是否失去焦点
【发布时间】:2010-09-07 23:54:34
【问题描述】:

作为这个问题的后续:Developing a online exam application, how do I prevent cheaters?

我能否检测到 Flex 应用程序何时失去焦点?也就是说,如果用户点击了另一个应用程序或打开了浏览器选项卡?

我读到这个:Detecting when a Flex application loses focus 但不是很清楚...

【问题讨论】:

    标签: apache-flex actionscript


    【解决方案1】:

    该链接代码的关键部分是

    systemManager.stage.addEventListener(Event.DEACTIVATE,deactivate);
    

    当焦点进入和离开播放器时,Flash 播放器会发送激活和停用事件。您需要做的就是为它们创建一个监听器并做出适当的反应。

    可以在blog.flexaxamples.com 中查看有关如何使用激活和停用事件的更清晰示例。

    此外,在某些浏览器中激活和停用事件似乎有问题。 Colin Moock has more info on that here.

    【讨论】:

      【解决方案2】:

      您可以在主应用程序标记中添加激活处理程序。这会检测 flex 应用程序何时获得焦点。 例如:

      <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" verticalAlign="middle" backgroundColor="white" activate="activateHandler(event);" deactivate="deactivateHandler(event);">

      【讨论】:

        【解决方案3】:

        这将用于检测 Flex 窗口何时失去焦点,但检测窗口何时重新获得焦点而无需实际单击 flex 应用程序需要更新 HTML 包装器,对吗?比如:

        <script language="JavaScript" type="text/javascript">
        <!--
        // -----------------------------------------------------------------------------
        // Globals
        // Major version of Flash required
        var requiredMajorVersion = ${version_major};
        // Minor version of Flash required
        var requiredMinorVersion = ${version_minor};
        // Minor version of Flash required
        var requiredRevision = ${version_revision};
        // -----------------------------------------------------------------------------
        // -->
        
        
            function onAppFocusIn()
            {
                ${application}.onAppFocusIn();
                alert("onAppFocusIn");
            }
        
        </script>
        <body scroll="no" onFocus="onAppFocusIn()">
        

        我正在尝试实现这一点,但是一旦我移回 flex 应用程序窗口,onAppFocusIn() 函数就不会执行。当我查看源代码时,代码就在那里。有谁知道为什么??

        谢谢, 安妮

        【讨论】:

          【解决方案4】:

          在 Flex 4.6 中,此命令有效 systemManager.stage.addEventListener(Event.DEACTIVATE, deactivate) 但请确保将 Flash 应用程序 wmode 设置为窗口(默认)。当 wmode 是透明的时,事件没有被捕获。您在放置 Flash 应用程序的嵌入式 html 中设置 wmode。示例:

          <object classid="clsid:D27WEE-A16D-21cf-90F2-422253540410" width="100%" height="100%"
          id="MyApp" name="MyApp" align="middle">
          <param name="movie" value="MyApp.swf?v=1.00.008" />
          <param name="wmode" value="transparent">      <----- take out this
          

          ...

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-08-07
            • 1970-01-01
            • 1970-01-01
            • 2011-09-16
            • 2016-04-17
            • 2011-08-05
            • 1970-01-01
            • 2023-03-24
            相关资源
            最近更新 更多