因此,我一般在学习飞镖和网页开发。现在我正在试验历史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);
});
}
我的结论是,当我们点击浏览器的后退或前进按钮,或者使用window.history.forward()
或window.history.back()
是onPopState
才会触发。所以这就像我们渲染一个模板,然后使用pushState
来更改它的url,而不是基于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]();
});
}
我可以通过点击changeUrl
得到input
的值,然后通过添加一个监听器changeUrl
,我可以使用pushState
到浏览器的更新URL。我期待的是,当我做pushState
时,window.onPopState
将触发并调用回调,但实际上它不会。
tldr,我想要实现的是:
监听URL的改变 - >获取当前URL - >使用当前的URL来调用存储在地图中的处理程序。当使用pushState
更新网址时,使用onHashChange
也不起作用,其前缀为#
。
我几次读到你的问题,但我仍然不确定你在问什么。有没有按预期工作? –
编辑我的答案。我想我现在理解你的问题。如果你不这么认为,写一个评论,我再看看。 –