2010-08-11 121 views
11

我想確定如何過濾F5,刷新按鈕X,並在瀏覽器中通過silverlight 4.0或甚至在服務器端關閉。Silverlight 4:檢測瀏覽器F5 /刷新和X /關閉

謝謝

編輯:

我添加賞金就在今天我的問題,7月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和關閉按鈕,消息框不應該出現。以防萬一解決方案處於預先安裝狀態。

感謝您的幫助!

+0

過濾器如何:

我使用此代碼解決我的問題?我懷疑這是可能的。 – Rup 2010-08-11 08:26:59

+0

我只是想知道如何,不是爲了防止重新加載web服務。 – xscape 2010-08-11 08:28:04

+0

重新加載Web服務意味着什麼?如果Web服務處於某種非默認狀態,請添加一些狀態變量,該應用程序將在啓動時進行設置,因此每次重新啓動都會重置此變量,並且您會從中獲取事件? – Zee 2011-07-29 14:18:40

回答

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"); 
     } 
    } 
+0

這是如何工作的? – 2013-05-20 09:19:32

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 
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") 
+0

* Request.Headers [「Accept-Encoding」] * Request.Headers [「Accept-Charset」] * Request.Headers [「Accept-Language」] * Request.Headers [「Accept」]所有這些4,當我打F5,IsRefresh仍然是假,我錯過了什麼? – xscape 2010-08-12 07:34:32

+0

即使我將其更改爲此,Request.Headers [「pragma」]。Contains(「no-cache」); OR(Request.Headers [「pragma」] ??「」).Contains(「no-cache」);這是錯誤:未將對象引用設置爲對象的實例 – xscape 2010-08-12 07:41:22