Узнать когда окно браузера получает или теряет фокус

Flex cookbook entry: How do I know when the browser window gets or loses focus.

В наше время существует много ресурсоёмких Flash и Flex приложений, которые занимают много памяти и сильно нагружают процессор, даже тогда, когда пользователь не работает с приложением. К примеру, пользователь мог отвлечься на другое приложение или таб в браузере. Особо требовательные к ресурсам приложения, использующие 3D, анимацию или сложные эффекты и фильтры, можно разгрузить останавливая анимацию, видео и музыку. Таким образом снимать нагрузку с процессора, когда пользователь не работает с приложением. Для получения информации, когда пользователь не использует приложение, будет использовано JavaScript событие onblur, испускаемое когда пользователь переводит фокус на другое приложение, окно или таб. Такое же событие - onfocus будет использовано, когда пользователь активирует окно с приложением. Для взаимодействия с JavaScript используется библиотека JSInterface:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
  3. preinitialize="{preinitializeHandler(event)}">
  4. <mx:Script>
  5. <![CDATA[
  6. import mx.managers.PopUpManager;
  7. import mx.controls.Alert;
  8. import aw.external.JSInterface;
  9. protected function preinitializeHandler(event:Event):void{
  10. JSInterface.initialize();
  11. JSInterface.window.onfocus = this.windowOnFocusHandler;
  12. JSInterface.window.onblur = this.windowOnBlurHandler;
  13. }
  14. protected var _focusAlert:Alert;
  15. protected function windowOnFocusHandler(event:Object=null):void{
  16. if(!this._focusAlert) return;
  17. PopUpManager.removePopUp(this._focusAlert);
  18. this._focusAlert = null;
  19. // show effects
  20. // start animation
  21. }
  22. protected function windowOnBlurHandler(event:Object=null):void{
  23. this._focusAlert = Alert.show('Waiting...', '', Alert.OK);
  24. // stop animation
  25. // hide effects
  26. }
  27. ]]>
  28. </mx:Script>
  29. </mx:Application>

В этом примере неактивное приложение отображает сообщение "Waiting...".

Загрузить проект.

Посетить официальный сайт JSInterface.

Метки: , , , , , ,

Добавить комментарий

Вы должны авторизоваться для отправки комментария.