html5历史导航:除了页面加载之外,没有触发popstate
html5 history navigation: popstate not triggered except on page load
给定一个带有ajax导航的Web应用程序,您打算使用html5的历史导航。
但是:绑定到popstate事件时,它不会被触发。页面加载异常,当它是:
如果HTML5可用(它被正确检测到,演示在Chrome中的工作效果和FF一样好):
// Callback
function historyChangeHandler(data) {
console.log(data);
}
// Bind
$(window).bind('popstate', historyChangeHandler);
// Trigger
$("a").click(function(e) {
var url = "/";
// ...
console.log("clicked");
history.pushState({url: url}, "", url);
return false;
});
什么不起作用:
- 单击链接时不会调用popstate回调historyChangeHandler()。也就是说,单击会打印,但不会打印事件
我尝试过的:
- 使用setTimeout延迟pushState调用
- e.preventDefault();并返回true而不是false
- 还附加到div-s并返回true
什么有效:
- historyChangerHandler()在页面加载时被调用
- historyChangerHandler()在按下后退按钮时被调用
- historyChangerHandler()在按下前进按钮时被调用
- historyChangeHandler(),如果从控制台调用history.pushState({url:"/test"},","/test")
我遗漏了什么线索吗?
popstate
不应该在单击链接时调用。当用户使用后退/前进按钮进行导航时,会调用它。
一切都按预期进行。
为什么需要启动popstate事件?为什么不直接调用函数呢?
$("a").click(function(e) {
var url = "/";
// ...
console.log("clicked");
history.pushState({url: url}, "", url);
historyChangeHandler({url: url});
return false;
});
相关文章:
- 如何使用url加载程序在webpack中导入多个图像
- 如何在生成下载文件时显示加载动画
- 有没有任何方法可以将控制器从文件加载到ui路由器$stateProvider中
- 无法在通过jQuery的ajax加载的页面中执行javascript
- Emberjs应用程序加载在除Index之外的所有路由上
- 在chrome.tabs.onCreated之后加载HTML页面
- 单击F5时如何停止页面加载
- HTML5音频加载和播放获胜'我不能在iPad上工作
- 跟踪在页面加载时应用内联样式的JavaScript
- 在使用Polymer'加载所有json文件后执行方法;s的核心ajax
- jQuery Lazy加载动画滚动
- Html页面上的多个Base64图像和平滑加载
- 如何创建带有插槽的vue js组件预加载程序
- Webpack/Rect:遵循egghead.io教程,但出现错误:您可能需要一个合适的加载程序来处理此文件类型
- 如何使该数据在所有元素中加载
- Chrome扩展没有't在重新加载之前考虑期权价值
- 使用javascript在Flash中加载外部图像
- Ajax文件加载和<输入>文件加载
- 忽略Safari's初始页面加载popstate
- html5历史导航:除了页面加载之外,没有触发popstate