Silverlight 4:检测浏览器F5 /刷新和X /关闭

时间:2010-08-11 08:25:06

标签: silverlight browser silverlight-4.0 refresh

我想确定如何通过silverlight 4.0甚至在服务器端过滤F5,刷新按钮,X和关闭浏览器。

谢谢

编辑:

我今天(2011年7月28日)在我的问题中添加了赏金。我以前的解决方案/答案已不再适用于IE 9。

window.onunload = function (e) {
    // Firefox || IE
    e = e || window.event;
    var y = e.pageY || e.clientY;

    if (y < 0) {
        alert("close");
    }
    else {
        alert("refresh");
    }
}

当用户点击F5,刷新,X和关闭按钮时,不应出现消息框。以防万一解决方案是onbeforeunload。

谢谢你的帮助!

3 个答案:

答案 0 :(得分:2)

客户端无法确定应用程序启动是否是用户执行刷新操作的结果。

但是,您可以在服务器端确定正在刷新页面。您可以将以下属性添加到托管Silverlight应用程序的ASPX页面的代码隐藏。

public bool IsRefresh
{
   get { Request.Headers["pragma"] ?? "").Contains("no-cache"); }
}

现在您使用此属性有条件地在silverlight插件initParams中包含一个值。

<object ...>
   <param name="initParams" value="IsRefresh=<%=IsRefresh.ToString()%>" />
</object>

然后在Silverlight代码中,您可以确定应用程序是否因为刷新而上次加载: -

if (Application.Current.Host.InitParams["IsRefresh"]  == "True")

答案 1 :(得分:2)

因为在客户端不可能,所以我在服务器端做了。

我使用此代码解决了我的问题:

window.onunload = function (e) {
        // Firefox || IE
        e = e || window.event;
        var y = e.pageY || e.clientY;

        if (y < 0) {
            alert("close");
        }
        else {
            alert("refresh");
        }
    }

答案 2 :(得分:0)

没有属性可以通过按F5按钮检查您的应用程序是否已加载,但您可以处理应用程序启动事件并使用日期时间设置变量。您的页面加载的那一刻,您可以检查时间跨度是否只是几秒钟之前。所以现在你知道应用程序第一次加载或者按下F5按钮的时间只有几秒钟。 我不知道这对你来说是否足够,但你可以尝试一下:

App.xaml.cs

public class App : Application
{
 private DateTime appStartupTime {get; set};
 public App()
 {
     Startup += new EventHandler(Application_Startup);
 } 

 void Application_Startup(object sender, StartupEventArgs e)
 {
   //initialize the startupTime
   appStartupTime = DateTime.Now; 
 }
 public bool IsApplicationReLoaded
 {
   get
   {
     //return true if your app is started less 10 seconds ago
     return DateTime.Now.AddSeconds(-10) < appStartupTime;
   }
  }
}

现在,您可以从任何地方开始使用以下代码

(Application.Current as App).IsApplicationReloaded