4

我正在查看GWT 中的HistoryHistory JavaDocs,我注意到无法判断是否按下了前进或后退按钮(无论是实用的还是用户的)。“按钮按下”由您注册的 addValueChangeHandler 处理,但唯一传递给处理程序的是历史堆栈上的字符串。没有迹象表明“历史”是在“后退”(使用后退箭头按钮)还是“前进”(使用右箭头按钮)。有没有办法确定这一点?

4

2 回答 2

4

对不起,你不能。即使可以,也有一些浏览器,比如 Firefox,可以让用户“跳”回不止一页。因此,如果您尝试依赖相对“坐标”而不是绝对坐标,导航可能会破坏您的应用程序。

你总是可以在你的历史令牌上附加某种计数器。如果您只有一个历史监听器,这并不难。

于 2010-04-23T00:35:43.450 回答
0

你可以做的是有一个这样的 UrlManager:

   public class UrlManager implements ValueChangeHandler<String> {

   public UrlManager() {
     History.addValueChangeHandler(this);       
    }

  public void onValueChange(ValueChangeEvent<String> event) {     
    String historyToken = event.getValue();

  }
   }

将每个历史令牌保存到列表中。
如果它是一个全新的历史令牌,则将其添加到列表中。如果它是前一个历史令牌,则后退按钮已被按下。

我建议使用列表来保存标记并保存可以在列表中上下移动的迭代器。所以最初它指向列表的末尾。如果新令牌是列表中的前一项,则返回按钮已被按下。如果您在列表中间(后退几次)并且有一个新条目进入(按下了新链接),请删除列表的其余部分(不能再继续前进)并添加新条目 - 和将迭代器移动到该项目。

你明白了。

于 2013-07-25T09:20:04.493 回答