Flex cookbook entry: How do I know when the browser window gets or loses focus.
В наше время существует много ресурсоёмких Flash и Flex приложений, которые занимают много памяти и сильно нагружают процессор, даже тогда, когда пользователь не работает с приложением. К примеру, пользователь мог отвлечься на другое приложение или таб в браузере. Особо требовательные к ресурсам приложения, использующие 3D, анимацию или сложные эффекты и фильтры, можно разгрузить останавливая анимацию, видео и музыку. Таким образом снимать нагрузку с процессора, когда пользователь не работает с приложением. Для получения информации, когда пользователь не использует приложение, будет использовано JavaScript событие onblur, испускаемое когда пользователь переводит фокус на другое приложение, окно или таб. Такое же событие - onfocus будет использовано, когда пользователь активирует окно с приложением. Для взаимодействия с JavaScript используется библиотека JSInterface:
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" preinitialize="{preinitializeHandler(event)}"> <mx:Script> <![CDATA[ import mx.managers.PopUpManager; import mx.controls.Alert; import aw.external.JSInterface; protected function preinitializeHandler(event:Event):void{ JSInterface.initialize(); JSInterface.window.onfocus = this.windowOnFocusHandler; JSInterface.window.onblur = this.windowOnBlurHandler; } protected var _focusAlert:Alert; protected function windowOnFocusHandler(event:Object=null):void{ if(!this._focusAlert) return; PopUpManager.removePopUp(this._focusAlert); this._focusAlert = null; // show effects // start animation } protected function windowOnBlurHandler(event:Object=null):void{ this._focusAlert = Alert.show('Waiting...', '', Alert.OK); // stop animation // hide effects } ]]> </mx:Script> </mx:Application>
В этом примере неактивное приложение отображает сообщение "Waiting...".
Посетить официальный сайт JSInterface.
Метки: browser, ExternalInterface, Flash, Flex, focus, JavaScript, JSInterface