Silverlight 4: обнаружение браузера F5/обновление и X/Close
Я хочу определить, как фильтровать F5, кнопку обновления, X и закрывать в браузере через silverlight 4.0 или даже на стороне сервера.
Благодарю вас
Редакция:
Я добавил щедрость к моему вопросу только сегодня, 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, refresh, X и close, окно сообщения НЕ должно появляться. На всякий случай решение должно быть продолжено.
Спасибо за помощь!
Ответы
Ответ 1
так как это невозможно на стороне клиента, я сделал это на стороне сервера.
Я решаю свою проблему с помощью этого кода:
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
На стороне клиента невозможно определить, является ли запуск приложения результатом операции обновления, выполняемой пользователем.
Однако на сервере можно определить, что страница обновляется. Вы можете добавить следующее свойство в код страницы ASPX, на которой размещено приложение Silverlight.
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")
Ответ 3
Нет свойства проверить, загружено ли ваше приложение, нажав кнопку 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