Я хочу определить, как отфильтровать 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, обновляются, X и кнопка закрытия , окно сообщения НЕ должно появляться. На всякий случай решение находится перед загрузкой.
Спасибо за вашу помощь!
так как это невозможно на стороне клиента, я сделал это на стороне сервера.
Я решаю свою проблему, используя этот код:
window.onunload = function (e) {
// Firefox || IE
e = e || window.event;
var y = e.pageY || e.clientY;
if (y < 0) {
alert("close");
}
else {
alert("refresh");
}
}
На стороне клиента невозможно определить, является ли запуск приложения результатом операции обновления, выполненной пользователем.
Однако вы можете определить на стороне сервера, что страница обновляется. Вы можете добавить следующее свойство в код программной части страницы 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")
Нет свойства, чтобы проверить, загружено ли ваше приложение, нажав кнопку 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