我想确定如何通过silverlight 4.0甚至在服务器端过滤F5,刷新按钮,X和关闭浏览器。
谢谢
编辑:
我今天(2011年7月28日)在我的问题中添加了赏金。我以前的解决方案/答案已不再适用于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和关闭按钮时,不应出现消息框。以防万一解决方案是onbeforeunload。
谢谢你的帮助!
答案 0 :(得分:2)
客户端无法确定应用程序启动是否是用户执行刷新操作的结果。
但是,您可以在服务器端确定正在刷新页面。您可以将以下属性添加到托管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")
答案 1 :(得分:2)
因为在客户端不可能,所以我在服务器端做了。
我使用此代码解决了我的问题:
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 :(得分:0)
没有属性可以通过按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