gpt4 book ai didi

javascript - 在浏览器关闭前需要用户确认_iff_ Flex 变量为真

转载 作者:行者123 更新时间:2023-11-30 18:55:21 25 4
gpt4 key购买 nike

我有一个 Flex 应用程序,允许用户编辑基于云的文档。 (想想 SlideRocket。)当用户试图离开或关闭浏览器窗口时,如果他们有未保存的更改,我想向他们显示一个“你确定”对话框。

我正在使用以下自定义类,我在 Flash player notified 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;
}

行为在调试和发布版本中,以及在生产服务器和本地机器上都是相同的。

如有任何帮助,我们将不胜感激

戴夫

最佳答案

现在,当 JavaScript 事件被触发时,它被设置为在您的 AS3 代码中调用您的函数,它确实如此。但是,JavaScript 函数不会返回您的 AS3 函数返回的值。要获得此行为,请将“return”添加到在 addExternalEventListener 中创建的 JavaScript 事件处理函数,如下所示:

var jsBindEvent:String = "function(){"+qualifiedEventName+"= function(){return "+jsExecuteCallBack+"};}";

由于事件处理程序应返回 true 或 false 值,因此您的 requestUnloadConfirmation 函数的返回类型应为 Boolean 并返回 false 以取消事件,否则为 true。使用以下命令获取确认对话框:

private function requestUnloadConfirmation():Boolean {          
if (changedSinceSave)
return ExternalInterface.call("confirm", "There are unsaved changes. Are you sure you want to leave without saving?");
else
return false;
}

更新:事实证明,向 window.onbeforeunload 返回一个字符串会导致自动显示一个确认对话框。用于确认的 ExternalInterface.call 会导致显示第二个对话框;这是多余的。 AS3 代码中唯一需要更改的是在生成的 JavaScript 中添加“返回”。

关于javascript - 在浏览器关闭前需要用户确认_iff_ Flex 变量为真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2323783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com