作为这个问题的后续: 开发在线考试应用程序,如何防止作弊?

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

我读到了这个: 检测 Flex 应用程序何时失去焦点 但不是很清楚...

有帮助吗?

解决方案

该链接代码的关键部分是

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

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

有关如何使用激活和停用事件的更清晰示例,请参见 博客.flexaxamples.com.

此外,看起来激活和停用事件在某些浏览器中存在问题。 Colin Moock 在此处提供了更多相关信息。

其他提示

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

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

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

谢谢,安妮

在Flex 4.6中,此命令Works SystemManager.Stage.AddeventListener(event.deectivate,deactivate),但请确保将Flash App 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

...

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top