簡體   English   中英

GWT MVP,無需跟蹤歷史記錄/忽略后退按鈕

[英]GWT MVP without tracking History / ignoring back button

首先,在大火開始之前,我確實知道嘗試阻止瀏覽器中的后退按鈕是一個愚蠢的主意。 我不會嘗試這樣做,但是我的業務合作伙伴對此非常堅持。 我們正在將現有的.exe移植到Web上,其定義是“在瀏覽器中運行”而不是“使其成為網站”。 因此,事實上這是一個壞主意(我同意),這是一個問題:

有沒有一種方法可以忽略或欺騙GWT PlaceController /歷史記錄管理器機制,以便當按下后退按鈕時,它僅停留在同一頁面上? 我已經使用Window.addWindowClosingHandler添加了一個處理程序,該處理程序將提示用戶是否要離開頁面並覆蓋defaultHistorian的newItem()方法,以便根本不會跟蹤任何歷史記錄,但是這與業務無關人們想要。

他們想要的只是忽略后退按鈕,以便在單擊它時什么也不會發生。 如果有人知道如何使用GWT做到這一點,我將非常感激。

而且我已經在Google上進行了大量搜索,但沒有找到與該問題完全相同的東西。至少,沒有足夠的幫助。

我能夠使GWT不累積任何歷史記錄,因此當用戶按下BACK按鈕時,它們將導致發生onWindowClosing事件,並且瀏覽器將提示他們是否要留下。 這將實現不允許“返回”按鈕將其取回的目標,但是有點像Draconian。 此代碼執行以下操作:

class TvHistorian extends PlaceHistoryHandler.DefaultHistorian
{
  @Override
  public void newItem(String token, boolean issueEvent) {
    // don't do anything - this will prevent history from accumulating
  }
}

final PlaceHistoryHandler historyHandler = new PlaceHistoryHandler(historyMapper, new TvHistorian());

我已經嘗試了很多方法,包括擴展PlaceController.goTo()以保存“ lastNormalFlowPlace”。 然后,我嘗試重寫History.onValueChange以使用此保存的Place(如果它與指定的事件不同)。 但是我想我錯過了一些微妙之處,因為它沒有按預期工作。

除了上述例外,我的代碼幾乎與此處記錄的內容完全一樣: http : //www.gwtproject.org/doc/latest/DevGuideMvpActivitiesAndPlaces.html#Putting_it_all_together

我已經在相同的上下文中發布了答案。

請查看以下鏈接:

嘗試任何選項:

  • History.addValueChangeHandler
  • WindowClosingHandler
  • Event.addNativePreviewHandler
  • $wnd.onbeforeunload

- 編輯 -

示例代碼:( 在Firefox,Chrome和IE9中都可以正常工作

注意:在onModuleLoad()方法的開頭添加以下代碼。

    final String initToken = "Place";

    History.addValueChangeHandler(new ValueChangeHandler<String>() {

        @Override
        public void onValueChange(ValueChangeEvent<String> event) {
            String token = event.getValue();
            if (!initToken.equalsIgnoreCase(token)) {
                History.newItem(initToken);
            }
        }
    });

    // fire the initial history state.
    History.fireCurrentHistoryState();

注意:添加對其他允許的歷史標記的檢查。

暫無
暫無

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

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