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

问题描述:

我想确定如何过滤F5,刷新按钮X,并在浏览器中通过silverlight 4.0或甚至在服务器端关闭。Silverlight 4:检测浏览器F5 /刷新和X /关闭

谢谢

编辑:

我添加赏金就在今天我的问题,7月28日2011年我以前的解决方案/回答不再在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和关闭按钮,消息框不应该出现。以防万一解决方案处于预先安装状态。

感谢您的帮助!

+0

过滤器如何:

我使用此代码解决我的问题?我怀疑这是可能的。 – Rup 2010-08-11 08:26:59

+0

我只是想知道如何,不是为了防止重新加载web服务。 – xscape 2010-08-11 08:28:04

+0

重新加载Web服务意味着什么?如果Web服务处于某种非默认状态,请添加一些状态变量,该应用程序将在启动时进行设置,因此每次重新启动都会重置此变量,并且您会从中获取事件? – Zee 2011-07-29 14:18:40

,因为它是不可能在客户端,我做到了在服务器侧。拦截它,并阻止用户这样做 -

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

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

这是如何工作的? – 2013-05-20 09:19:32

没有属性检查您的应用程序是否通过按下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 

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

但是,您可以在服务器端确定正在刷新页面。您可以将以下属性添加到承载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") 
+0

* Request.Headers [“Accept-Encoding”] * Request.Headers [“Accept-Charset”] * Request.Headers [“Accept-Language”] * Request.Headers [“Accept”]所有这些4,当我打F5,IsRefresh仍然是假,我错过了什么? – xscape 2010-08-12 07:34:32

+0

即使我将其更改为此,Request.Headers [“pragma”]。Contains(“no-cache”); OR(Request.Headers [“pragma”] ??“”).Contains(“no-cache”);这是错误:未将对象引用设置为对象的实例 – xscape 2010-08-12 07:41:22