我正在尝试使用 JQuery 创建一个 SPA 网站。我知道如何使用history.pushState
,$(window).on('popstate')
但我有几个问题。目前我有一个处理 popstate 事件和导航链接的 router.js 文件。我将链接放在自定义属性(data-navId="templates/page/page.html")或 href 中并使用
$(e).preventDefault();
. 用户点击链接并被$('.page-content').load('url', function() {})
执行history.pushstate
。
1)我是否被迫在每个模板中包含包含这些功能的 router.js 文件?我想要一个仅包含这些功能的 html。模板应仅包含 HTML 及其相应的脚本。我设法做到了这一点,但是如果用户刷新页面,模板将显示没有样式或任何东西。使用哈希是答案吗?或者,如果用户关闭浏览器并激活“恢复以前的页面”选项,则模板将仅加载其 html。
过去我开发的 SPA 页面不使用哈希popstate
,history.pushState
但我必须在每个文件中包含所有 html,然后调用$('.page-content').load(url + ' .page-content > *', function() {});
以避免刷新错误。
我也知道 facebookpopstate
用于现代浏览器和hashchange
旧版浏览器,可能包括 Modernizr.js 或一些自定义库。但是路由器如何在不包含在每个模板中的情况下工作?
提前致谢。