如何使用史的类来处理浏览器历史记录(How to handle browser history us

2019-10-19 06:18发布

所以我学习镖和web开发一般。 现在,我与历史API试验。 我有:

import 'dart:html';

void main() {
  ParagraphElement paragraph = querySelector('.parag');

  ButtonElement buttonOne = querySelector('.testaja');

  buttonOne.onClick.listen((_) {
    window.history.pushState(null, 'test title', '/testdata/');
    window.history.forward();
  });

  ButtonElement buttonTwo = querySelector('.testlagi');

  buttonTwo.onClick.listen((_) {
    window.history.back();
  });

  window.onPopState.listen((_) {
    window.alert(window.location.pathname);
  });
}

我的结论是, onPopState当我们点击浏览器的后退或前进按钮,或者只使用触发器window.history.forward()window.history.back() 因此,这就像,我们渲染一个模板,然后用改变其网址pushState ,不更新基于URL的变化模板。 这是真的还是假的?

编辑:

所以,也许我不太清楚。 比方说,我有这样的事情:

void main() {
  InputElement input = querySelector('.input')
  ButtonElement changeUrl = querySelector('.change-url');

  changeUrl.onClick.listen((event) {
    window.history.pushState(null, 'test tile', input.value);
  });

  Map urls = {
    '/' : showRoot,
    '/user/:id' : showUserProfile
  };

  window.onPopState.listen((_) {
    var location = window.location.pathname;

    urls[location]();
  });
}

我可以input点击的价值changeUrl ,然后通过添加一个监听器changeUrl ,我可以使用pushState对浏览器更新URL。 我很期待,当我做pushState ,该window.onPopState将触发并调用回调,在现实中却并非如此。

tldr,我想要实现的是:

监听URL的改变 - >获取当前URL - >使用当前的URL来调用存储在地图中的处理程序。 使用onHashChange也使用更新URL时不起作用pushState由前缀#

Answer 1:

编辑

使用设置散列

window.location.hash = input.value;

这触发了对PopStateHashChange事件

一样这样的链接的点击

<a href="#abc">abc</a>

原版的

我没有时间仔细看什么找你努力才达到..
但我认为你应该添加一个事件处理程序“window.onHashChange”这样普通的链接工作太导航系统,不仅按键上用onclick,处理程序修改浏览器历史记录。



文章来源: How to handle browser history using History class