【问题标题】:Differentiate between F5 and browser close event in flex/actionscript区分 flex/actionscript 中的 F5 和浏览器关闭事件
【发布时间】:2011-05-22 04:39:49
【问题描述】:

我正在使用以下代码来确定浏览器窗口的关闭,并且它运行良好。但是,当用户使用“F5”或单击浏览器刷新按钮刷新页面时会出现问题,即使在这种情况下也会调用相同的代码。

我想知道是否有任何方法可以使用 actionscript 区分浏览器关闭事件和刷新事件

package utils
{
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 );
    }
}
}

对上述实用程序的调用由

完成

ExternalInterfaceUtil.addExternalEventListener("window.onunload", handleLogout, "unloadFlex");

【问题讨论】:

  • 我很确定,只要用户离开页面,HTML onunload 事件就会触发。从本质上讲,刷新页面就是离开它然后回到同一个地方。我怀疑你无能为力。为什么你只在乎一种离开的方式,而不是另一种?
  • 当我关闭浏览器时,我想调用注销处理程序,但我不希望在用户刷新屏幕时发生同样的事情

标签: apache-flex actionscript adobe browser-refresh


【解决方案1】:

使用当前本地时间每隔几秒写入共享对象。

如果它存在于(最后几秒 + x)内,则它是刷新而不是关闭。

如果您需要一些代码示例,请告诉我

:)

【讨论】:

  • 不确定我是否得到了这个。但是使用 BlazeDS 提供的 ChannelSet 登录 API 解决了这个问题。为此,我们需要在 services-config.xml 的安全标签下定义自己的 loginCommand 类,该类将实际执行身份验证。在 flex 端调用 channelset.login() 将调用在 LoginCommand 实现中定义的 doAuthentication API。每次浏览器关闭时,服务器上的身份验证都会重置。
【解决方案2】:

伪代码:

public static function addExternalEventListener( qualifiedEventName:String, callback:Function,callBackAlias:String ):void
{
   if(lastKeyPressed.KeyCode != 116)
   {
    // 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 );
 }
}

【讨论】:

  • 加一个用于创造性解决问题的方法,但是如何在 AS3 或 JavaScript 中获得 lastKeyPressed 呢?这将如何处理单击刷新按钮?当用户按下 F5 然后关闭浏览器窗口时会发生什么?
  • 其实,现在我在看,这是一个非常错误的答案。我会将 lastKeyPressed 检查放在处理程序上,而不是我们添加侦听器的位置。
猜你喜欢
  • 2018-09-26
  • 1970-01-01
  • 1970-01-01
  • 2018-01-09
  • 2014-06-03
  • 2018-11-10
  • 2018-02-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多