Как определить, теряет ли приложение Flex фокус?
-
09-06-2019 - |
Вопрос
В продолжение этого вопроса: Разрабатывая приложение для онлайн-экзамена, как предотвратить мошенников?
Могу ли я обнаружить, что приложение Flex теряет фокус?то есть, если пользователь нажал на другое приложение или открыл вкладку браузера?
Я прочитал это: Обнаружение, когда приложение Flex теряет фокус но было не очень понятно...
Решение
Ключевой частью кода по этой ссылке является
systemManager.stage.addEventListener(Event.DEACTIVATE,deactivate);
Отправки Flash-плеера активируют и деактивируют события, когда фокус входит и покидает проигрыватель.Все, что вам нужно сделать, это создать для них прослушиватель и реагировать соответствующим образом.
Более понятный пример использования событий активации и деактивации можно увидеть на странице blog.flexaxamples.com.
Кроме того, похоже, что с событиями активации и деактивации в некоторых браузерах возникают проблемы. У Колина Мука больше информации об этом здесь.
Другие советы
Вы можете добавить обработчик активации в основной тег приложения.Это определяет, когда гибкое приложение переходит в фокус.Например:
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical"
verticalAlign="middle"
backgroundColor="white"
activate="activateHandler(event);"
deactivate="deactivateHandler(event);">
Это будет работать для обнаружения того, когда окна 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()">
Я пытаюсь реализовать это, но функция onAppFocusIn() не выполняется, когда я возвращаюсь в окно гибкого приложения.Когда я просматриваю исходный код, код там.Кто-нибудь знает почему??
Спасибо, Энни
В Flex 4.6 эта команда работает SystemManager.Stage.AddeventListener (event.deactivate, deactivate), но убедитесь, что приложение Flash Wmode установлено в Window (по умолчанию).Когда wmode был прозрачным, событие не перехватывалось.Вы устанавливаете wmode во встроенном HTML-коде, в который помещаете свое флэш-приложение.пример:
<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
...