Silverlight 4:检测浏览器F5/刷新和X/关闭
我想确定如何通过silverlight 4.0甚至服务器端在浏览器中过滤F5、刷新按钮、X和关闭 多谢各位 编辑: 就在今天,2011年7月28日,我在我的问题中添加了悬赏。我以前的解决方案/答案不再适用于IE 9。Silverlight 4:检测浏览器F5/刷新和X/关闭,silverlight,browser,silverlight-4.0,refresh,Silverlight,Browser,Silverlight 4.0,Refresh,我想确定如何通过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) {
window.onunload = function (e) {
// Firefox || IE
e = e || window.event;
var y = e.pageY || e.clientY;
if (y < 0) {
alert("close");
}
else {
alert("refresh");
}
}
window.onunload=函数(e){
//Firefox | | IE
e=e | | window.event;
变量y=e.pageY | e.clientY;
if(y<0){
警报(“关闭”);
}
否则{
警报(“刷新”);
}
}
当用户点击F5、刷新、X和关闭按钮时,消息框不应出现。以防在卸载之前解决方案处于打开状态
谢谢你的帮助 没有属性可以通过按F5按钮检查应用程序是否已加载,但您可以处理应用程序启动事件并设置带有日期时间的变量。页面加载时,您可以检查timespan是否在几秒钟前。因此,现在您知道应用程序是第一次加载的,或者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;
}
}
}
客户端无法确定应用程序启动是否是用户执行的刷新操作的结果 但是,您可以在服务器端确定页面正在刷新。您可以将以下属性添加到承载Silverlight应用程序的ASPX页面的代码隐藏中
public bool IsRefresh
{
get { Request.Headers["pragma"] ?? "").Contains("no-cache"); }
}
现在,您可以使用此属性在silverlight插件initParams
中有条件地包含一个值
<object ...>
<param name="initParams" value="IsRefresh=<%=IsRefresh.ToString()%>" />
</object>
由于这在客户端是不可能的,所以我在服务器端做了 我使用以下代码解决问题:
window.onunload = function (e) {
// Firefox || IE
e = e || window.event;
var y = e.pageY || e.clientY;
if (y < 0) {
alert("close");
}
else {
alert("refresh");
}
}
window.onunload=函数(e){
//Firefox | | IE
e=e | | window.event;
变量y=e.pageY | e.clientY;
if(y<0){
警报(“关闭”);
}
否则{
警报(“刷新”);
}
}
过滤方式-拦截并阻止用户这样做?我怀疑这是可能的。我只是想知道怎么做,不是为了防止而是为了重新加载web服务。你所说的重新加载web服务是什么意思?如果web服务处于非默认状态,请添加一些状态变量,该应用程序将在启动时设置,因此每次重新启动都将重置此变量,您将从中获取事件?谢谢Zeela,但是,我需要确定用户是关闭浏览器还是只是刷新浏览器。你还有什么其他的建议吗?对我所有的stackoverflow同事来说,这个有什么更新吗?感谢*Request.Headers[“Accept Encoding”]*Request.Headers[“Accept Charset”]*Request.Headers[“Accept Language”]*Request.Headers[“Accept”]这4个,当我点击F5时,IsRefresh仍然为False,我遗漏了什么吗?即使我将其更改为此,Request.Headers[“pragma”]包含(“无缓存”);或(Request.Headers[“pragma”]?“”)。包含(“无缓存”);这是错误:对象引用未设置为对象的实例
if (Application.Current.Host.InitParams["IsRefresh"] == "True")
window.onunload = function (e) {
// Firefox || IE
e = e || window.event;
var y = e.pageY || e.clientY;
if (y < 0) {
alert("close");
}
else {
alert("refresh");
}
}