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

Silverlight 4:检测浏览器F5/刷新和X/关闭,silverlight,browser,silverlight-4.0,refresh,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) {

我想确定如何通过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");
    }
}
window.onunload=函数(e){
//Firefox | | IE
e=e | | window.event;
变量y=e.pageY | e.clientY;
if(y<0){
警报(“关闭”);
}
否则{
警报(“刷新”);
}
}
当用户点击F5、刷新、X和关闭按钮时,消息框不应出现。以防在卸载之前解决方案处于打开状态


谢谢你的帮助

没有属性可以通过按F5按钮检查应用程序是否已加载,但您可以处理应用程序启动事件并设置带有日期时间的变量。页面加载时,您可以检查timespan是否在几秒钟前。因此,现在您知道应用程序是第一次加载的,或者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;
   }
  }
}

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

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

public bool IsRefresh
{
   get { Request.Headers["pragma"] ?? "").Contains("no-cache"); }
}
现在,您可以使用此属性在silverlight插件
initParams
中有条件地包含一个值

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

由于这在客户端是不可能的,所以我在服务器端做了

我使用以下代码解决问题:

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

        if (y < 0) {
            alert("close");
        }
        else {
            alert("refresh");
        }
    }
window.onunload=函数(e){
//Firefox | | IE
e=e | | window.event;
变量y=e.pageY | e.clientY;
if(y<0){
警报(“关闭”);
}
否则{
警报(“刷新”);
}
}

过滤方式-拦截并阻止用户这样做?我怀疑这是可能的。我只是想知道怎么做,不是为了防止而是为了重新加载web服务。你所说的重新加载web服务是什么意思?如果web服务处于非默认状态,请添加一些状态变量,该应用程序将在启动时设置,因此每次重新启动都将重置此变量,您将从中获取事件?谢谢Zeela,但是,我需要确定用户是关闭浏览器还是只是刷新浏览器。你还有什么其他的建议吗?对我所有的stackoverflow同事来说,这个有什么更新吗?感谢*Request.Headers[“Accept Encoding”]*Request.Headers[“Accept Charset”]*Request.Headers[“Accept Language”]*Request.Headers[“Accept”]这4个,当我点击F5时,IsRefresh仍然为False,我遗漏了什么吗?即使我将其更改为此,Request.Headers[“pragma”]包含(“无缓存”);或(Request.Headers[“pragma”]?“”)。包含(“无缓存”);这是错误:对象引用未设置为对象的实例
if (Application.Current.Host.InitParams["IsRefresh"]  == "True")
window.onunload = function (e) {
        // Firefox || IE
        e = e || window.event;
        var y = e.pageY || e.clientY;

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