2014-12-26 29 views
2

我有一個頁面,不允許用戶通過單擊瀏覽器刷新按鈕或按F5來刷新頁面。所以我想模擬'表單重新提交'以顯示提示信息。如何在用戶嘗試刷新瀏覽器時獲取「確認表單重新提交」

有人可以指導我實施它的方法嗎?

是否有任何跨瀏覽器的解決方案可用於此?

+0

一個Javascript提示 – Jhecht

+0

你寫的Web應用程序,還是別人寫的應用程序,你使用它? – jww

+0

'$(窗口)。在( 'beforeunload',函數(){ 回報 '您確定要離開嗎?'; });' –

回答

1

要刷新沒有得到及時的頁面必須使用HTTP GET

使窗體已提取有method="GET"代替method="POST"(和修復服務器處理這個變化apropriate工作)

或者緩存在提交表單後立即使用HTTP代碼303重定向到會話中的發佈數據並重定向到顯示頁面。

如果您想要提示,請將用戶訪問頁面的鏈接mzke放入POST表單上的提交按鈕。如果用戶使用GET請求到達,則向其提供一個帶有JavaScript的頁面,該頁面會提交將其轉換爲POST請求的表單。

+0

嗨@Jasen,我想要的是當用戶得到提示消息試圖刷新頁面。你的解決方案似乎避免了提示信息。? – user44858

+0

哎呀!我已經添加了關於如何做你想做的事情的說明。 – Jasen

+0

'onBeforeUnload'將在遠離或關閉該頁面時運行。如果你想要那個效果,就用這個來代替這個。 – Jasen

0

你想要的是傾聽beforeunload事件並拋出一個確認框。

編輯:既然你已經在註釋中規定的另一個答案that you need to support Mobile Safari(其犯規支持beforeunload你可以嘗試像jquery.AreYouSure

the discussion on this page庫,它支持移動Safari瀏覽器,雖然我還沒有使用它自己

注意,有些瀏覽器會忽略confirm調用您提供的文本,並顯示它們的默認文字。有更深入的方式來解決這一點,但這個提示對話框。

$(window).on("beforeunload", function() { 

     return confirm("Do you really want to close?"); 
}); 
+0

@ user44858我更新了我的答案,並提供了一個支持移動Safari的選項 – DelightedD0D

0

您是如何設法禁用所有功能的?

對於瀏覽器按鈕,cross-compatible per MDN

window.onbeforeunload = function() { 
    return "Data will be lost if you refresh the page. Are you sure?"; 
}; 

對於按鍵:

window.addEventListener("keyup", checkForRefresh, false); 

var checkForRefresh = function(event) { 
    if (event.keyCode == 116) { 
     alert("Data will be lost if you refresh the page. Are you sure?"); 
    } 
}; 

擊鍵可能需要填充工具IE8的,但他們提供它在docs

+0

你知道「window.addEventListener」的原因嗎?我看到鏈接文檔中的建議,但我沒有看到爲什麼需要它的任何解釋。 – DelightedD0D

+0

我覺得很奇怪,我沒有看到'window.onkeyup = function(event){...'的任何例子。它看起來像'window.onkeyup'只能引用一個函數,而不是自己調用一個匿名函數。所以,無論如何你必須調用一個不同的函數,爲什麼不使用事件監聽器。 'window.onkeyup'的文檔非常少,所以我也不能爲了兼容性的原因推薦它。 – Adam

+0

我嘗試了onbeforeunload(),但它在Mobile Safari上不起作用。我發現一個網站在這個功能上運行得非常好:https://internet-banking.dbs.com.sg/IB/Welcome。但不知道他們是如何實現它的 – user44858

0

從其他disccussion:

有2個辦法用來拍攝這裏的人:

方法1:使用AJAX +重定向 使用JQuery或類似的東西這樣你張貼在後臺表單到Page2,而用戶仍然看到page1顯示。成功發佈後,您將瀏覽器重定向到Page2。

方法2:郵政+重定向到自我

這是在論壇上的常用技術。 Page1上的表單將數據發佈到第2頁,第2頁處理數據並完成需要完成的工作,然後它自己進行HTTP重定向。通過這種方式,瀏覽器記得的最後一個「動作」是第2頁上的一個簡單GET,所以表單不會在F5上重新提交。

你可以參考這樣的回答:https://stackoverflow.com/a/3968038/1853444

相關問題