Reputation: 3376
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!
Upvotes: 11
Views: 6118
Reputation: 3376
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");
}
}
Upvotes: 2
Reputation: 189457
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")
Upvotes: 2
Reputation: 1613
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
Upvotes: 0