如何检测Flex应用程序是否失去焦点

时间:2008-09-05 21:19:41

标签: flex actionscript

作为对此问题的跟进:Developing a online exam application, how do I prevent cheaters?

我可以检测Flex应用程序何时失去焦点吗?那就是如果用户点击了另一个应用程序或打开了浏览器选项卡?

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

4 个答案:

答案 0 :(得分:5)

该链接代码的关键部分是

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

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

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

这将检测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()函数没有执行。当我查看源代码时,代码就在那里。有谁知道为什么??

谢谢, 安妮

答案 3 :(得分:0)

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

<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

...