Silverlight 4: Detect browser F5 / refresh and X / Close

馋奶兔 提交于 2019-11-27 18:10:10

问题


I want to determine how to filter F5, refresh button, X and close in browser via silverlight 4.0 or even in server side.

thank you

EDITED:

I added bounty to my question just today, July 28 2011. My previous solution / answer is no longer working in 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");
    }
}

When the user hit F5, refresh, X and close button, message box should NOT appear. Just in case the solution is onbeforeunload.

Thanks for you help!


回答1:


It is not possible client-side to determine whether an application startup is the result of a refresh operation performed by the user.

However you can determine at serverside that a page is being refreshed. You can add the following property to the code-behind of the ASPX page hosting the Silverlight application.

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

Now you use this property to conditionally include a value in the silverlight plugin initParams.

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

Then in silverlight code you can determine if the application was last loaded as a result of a refresh with:-

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



回答2:


since it is not possible in client side, i did it in server side.

I solve my problem using this code:

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

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



回答3:


There is no property to check if your application is loaded by pressing the F5-button but you could handle the application startup event and set a variable with a datetime. The moment your page gets loaded you can check if the timespan is just a couple of seconds ago. So now you know that the application is loaded the first time or the F5-button is pressed when that time it is only a couple of seconds ago. I don't know if this is sufficient for you but you can give it a try:

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;
   }
  }
}

Now you can start using the code below from everywhere

(Application.Current as App).IsApplicationReloaded


来源:https://stackoverflow.com/questions/3456591/silverlight-4-detect-browser-f5-refresh-and-x-close

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!