Я пытаюсь создать веб-сайт SPA с JQuery. Я знаю, как использовать history.pushState
и $(window).on('popstate')
, но у меня есть несколько вопросов. В настоящее время у меня есть файл router.js, который обрабатывает событие popstate и навигационные ссылки. Я размещаю ссылки в пользовательском атрибуте (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() {});
, чтобы избежать ошибки обновления.
Я также знаю, что facebook использует popstate
для современных браузеров и hashchange
для более старых, возможно, путем включения Modernizr.js или какой-то пользовательской библиотеки. Но как работает роутер без включения его в каждый шаблон?
Заранее спасибо.