簡體   English   中英

防止用戶在“后退”按鈕上的瀏覽器中更改URL

[英]Prevent user from changing the URL in Browser on Back Button

目標:它們是我的WebApplication中的可編輯形式。 如果表單處於可編輯模式,我想向用戶提供頁面更改時的“確認導航”彈出窗口,以保存表單數據。

問題:如果表單處於可編輯模式,並且用戶點擊了正文上的導航后退按鈕或退格鍵,則Web應用程序將移至上一個歷史記錄頁面而沒有任何“確認導航”。

我能夠分別在窗口的重新加載和關閉事件中提供Confirm Reload和Confirm Close。

他們采取什么方式來防止用戶更改url從而防止表單數據丟失。

注意:只能使用JAVA,GWT和JAVASCRIPT。

如果您正在使用“活動和位置”設計模式,則每個“活動”都附帶一個方法mayStop()。 如果返回null,則當用戶移動到另一個位置時,不要求確認。

您可以向此方法添加檢查以查看視圖是否處於編輯模式,如果警告,則返回文本。

如果您的演示者未使用Activity,則應在入口點類的History對象中添加ValueChangeHandler,如下所述:

http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsHistory.html

請參閱StackOverflow上的相關問題

您可能應該使用javascript來做到這一點; 您想通過javascript偵聽某些窗口事件,然后在發生這些事件時觸發回調以彈出“確認導航”提示。

您不能阻止URL更改,但是您可以對更改做出反應並提示用戶。

如果您直接使用com.google.gwt.user.client.History ,則有點復雜,因為您必須存儲歷史記錄的ValueChangeHandler將使用的某些全局狀態。 對於用戶正在退出應用程序(導航或關閉窗口/選項卡)的情況,還必須注冊Window.ClosingHandler並在事件上調用setMessage

使用Places時要容易得多,因為將調度PlaceChangeRequestEvent 如果在其上調用setWarning ,則將提示用戶是否要導航,並且只有在他接受后,才會調度PlaceChangeEvent (請記住:使用瀏覽器的后退按鈕時,URL仍然會更改,因此當前位置和當前URL之間的不同步…直到下一次導航)。 Places考慮了您的應用程序的卸載,因此您無需執行任何特殊操作。

而如果你使用活動 ,該ActivitymayStop當被稱為PlaceChangeRequestEvent分派,你返回的值設置為事件如果非空的消息。

如果您想了解為什么無法阻止URL更改的更多詳細信息,請參閱: https : //code.google.com/p/google-web-toolkit/issues/detail?id=6726

(注意:您可以覆蓋該URL,但隨后您將丟失“轉發歷史記錄”,並且可能會惹惱用戶)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM