【发布时间】:2023-03-31 23:01:01
【问题描述】:
首先,在火焰开始之前,我知道试图阻止浏览器中的后退按钮是一个愚蠢的想法。我不会尝试这样做,但我的商业伙伴非常坚持。我们正在将现有的 .exe 移植到网络上,他们对此的定义是“在浏览器中运行”而不是“使其成为网站”。所以,事实上这是一个坏主意(我同意),这是一个问题:
有没有办法忽略或欺骗 GWT PlaceController / History manager 机制,以便当按下后退按钮时,它只停留在同一页面上? 我已经使用 Window.addWindowClosingHandler 添加了一个处理程序,该处理程序将提示用户是否要离开页面并覆盖 defaultHistorian 的 newItem() 方法,以便根本不跟踪任何历史记录,但这并不是业务人们想要。
他们想要的是忽略后退按钮,以便在单击它时不会发生任何事情。 如果有人知道如何使用 GWT 做到这一点,我将不胜感激。
而且我已经做了很多谷歌搜索,但没有找到与这个问题完全一样的东西。至少,距离不够近,无法提供帮助。
我能够让 GWT 不累积任何历史记录,这样当用户按下 BACK 按钮时,他们会引发 onWindowClosing 事件,并且浏览器会提示他们是否想留下或离开。这将实现不允许 BACK 按钮将它们收回的目标,但它有点苛刻。这段代码就是这样做的:
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 以使用这个保存的地方,如果它与事件指定的不同。但我想我错过了一些微妙之处,因为它没有按预期工作。
除了上述例外,我的代码看起来几乎与此处记录的内容完全相同:http://www.gwtproject.org/doc/latest/DevGuideMvpActivitiesAndPlaces.html#Putting_it_all_together
【问题讨论】:
-
点击后退按钮可以提示用户吗?
-
@Braj 不,这就是问题所在。我可以让它在用户单击后退按钮时提示用户。但我的业务伙伴宁愿它静静地留在当前的“页面”/GWT 屏幕上。我想要的是仅在调用
PlaceController.goTo(Place)时导航并取消/忽略任何其他导航尝试。 -
你试过
History#ValueChangeHandler我在帖子中建议的吗? -
@Braj 我用 ValueChangeHandler 尝试了几种变体,但要么我的初始页面根本无法加载,要么它们没有帮助我留在同一页面上(因为 BACK 带你的页面to 是向前导航的一个例外,所以 BACK 仍然有效)。
-
请您分享您的代码。
标签: gwt browser-history