У меня есть приложение Flex, которое позволяет пользователю редактировать облачный документ. (Вспомните SlideRocket.) Когда пользователь пытается отойти или закрыть окно браузера, я бы хотел показать ему диалоговое окно, в котором вы уверены, если у него есть несохраненные изменения.
Я использую следующий пользовательский класс, который я нашел в Flash Player уведомляет о закрытии браузера или изменении страницы (as3) . Я не думаю это проблема.
package
{
import flash.external.ExternalInterface;
public class ExternalInterfaceUtil
{
public static function addExternalEventListener(qualifiedEventName:String, callback:Function, callBackAlias:String):void
{
// 1. Expose the callback function via the callBackAlias
ExternalInterface.addCallback( callBackAlias, callback );
// 2. Build javascript to execute
var jsExecuteCallBack:String = "document.getElementsByName('"+ExternalInterface.objectID+"')[0]."+callBackAlias+"()";
var jsBindEvent:String = "function(){"+qualifiedEventName+"= function(){"+jsExecuteCallBack+"};}";
// 3. Execute the composed javascript to perform the binding of the external event to the specified callBack function
ExternalInterface.call(jsBindEvent);
}
}
}
В своей функции applicationComplete я добавляю прослушиватель событий в событие javascript window.onbeforeunload следующим образом:
ExternalInterfaceUtil.addExternalEventListener("window.onbeforeunload", requestUnloadConfirmation, "unloadConfirmation");
Функция Actionscript requestUnloadConfirmation (ниже) успешно вызывается, когда пользователь пытается закрыть окно браузера. Тем не менее, это не мешает браузеру закрыться. (В Chrome браузер закрывается и впоследствии вызывается функция Actionscript. В Firefox браузер остается открытым в течение всей функции, но затем закрывается.)
private function requestUnloadConfirmation():String {
if (changedSinceSave)
return "There are unsaved changes. Are you sure you want to leave without saving?";
else
return null;
}
Поведение идентично как в отладочной, так и в выпускной сборках, и на производственном сервере, и на локальном компьютере.
Любая помощь будет принята с благодарностью,
Dave