我有一个 Flex 应用程序,它允许用户编辑基于云的文档。(想想 SlideRocket。)当用户试图离开或关闭浏览器窗口时,如果他们有未保存的更改,我想向他们显示一个你确定的对话框。
我正在使用以下自定义类,我在Flash player notify on browser close or change page (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;
}
调试和发布版本以及生产服务器和本地机器上的行为都是相同的。
任何帮助将不胜感激,
戴夫