【发布时间】:2013-05-17 14:00:52
【问题描述】:
<script type="text/javascript">
window.onbeforeunload=before;
window.onunload=after;
function before(evt)
{
var message="If you continue, your session will be logged out!";
if(typeof evt=="undefined"){
evt=window.event;
}
if(evt){
evt.returnValue=message;
}
}
function after()
{
var flex=document.${application}||window.${application};
flex.unloadMethod(); //calls the flex class containing the "unloadMethod()" which
//calls the logout.jsp that does the actually dropping of credentials
}
</script>
所以这是我的想法: 当用户单击返回、刷新或关闭窗口时,标准的 onbeforeunload 弹出框将与位于我的消息变量中的文本一起出现。然后,如果用户点击取消,onunload 事件将不会被执行,用户将停留在当前页面。但是如果用户点击 Okay,那么 onunload 事件应该触发,然后执行我的注销类。
这就是正在发生的事情: 需要时会出现弹出窗口,并且“取消”按钮也可以使用。但是,如果用户单击 Okay,似乎 onunload 事件触发得太快,以至于我的注销类无法执行,因为它永远不会将它们注销。
我知道我的注销类有效,因为如果我只是在 onbeforeunload 中调用我的 flex.unloadMethod,它会将它们注销。
我已经对此进行了一周的研究,似乎我已经接近了,但我把一些东西放在了错误的地方。如果您有任何示例或建议,将不胜感激。
【问题讨论】:
-
这个问题很可能会发生,因为浏览器并没有真正给你足够的时间让你的事件处理程序来完成他们的工作。因为用户正在离开,所以您希望在这些场景中执行尽可能少的代码,以便为您的代码提供足够的时间来完成。我会尝试使用来自 Javascript 而不是 Flash 的 AJAX 调用来触发您的 logout.jsp。
-
是的,感谢您的评论。我现在意识到我想做的事情似乎是不可能的。相反,我将完全绕过弹出窗口,以便执行我的 logout.jsp。 (见答案)再次感谢您的回复!
标签: javascript flex4 onbeforeunload onunload