Я изучаю API-интерфейс истории HTML5 для решения проблем с глубоким связыванием с загруженным контентом AJAX, но я изо всех сил стараюсь сойти с ума. Кто-нибудь знает о хороших ресурсах?
Я хочу использовать это, поскольку это отличный способ разрешить возможность отправки ссылок, возможно, JS не включен. Многие решения терпят неудачу, когда кто-то с JS отправляет ссылку кому-то без.
Мои первоначальные исследования, похоже, указывают на API истории в JS и метод pushState.
http://html5demos.com/history
Ответ 1
Для большого учебного пособия доступна страница Mozilla Developer Network по этой функции: https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history
К сожалению, API истории HTML5 реализован по-разному во всех браузерах HTML5 (что делает его непоследовательным и ошибочным) и не имеет резервной копии для браузеров HTML4. К счастью, History.js обеспечивает кросс-совместимость для браузеров HTML5 (гарантируя, что все браузеры HTML5 работают так, как ожидалось) и необязательно предоставляет хеш-резерв для HTML4 (включая поддерживаемую поддержку данных, заголовков, функций pushState и replaceState).
Подробнее о History.js можно узнать здесь:
https://github.com/browserstate/history.js
Для статьи о Hashbangs VS Hashes VS API HTML5 History API см. здесь:
https://github.com/browserstate/history.js/wiki/Intelligent-State-Handling
Ответ 2
Я много выиграл от "Dive to HTML 5". Объяснение и демонстрация проще и точнее.
Глава истории - http://diveintohtml5.info/history.html
и демо-версия истории - http://diveintohtml5.info/examples/history/fer.html
Ответ 3
Имейте в виду, что при использовании pushstate HTML5, если пользователь копирует или закладывает глубокую ссылку и снова посещает ее, тогда это будет прямой хит сервера, который будет 404, поэтому вам нужно быть готовым к этому, и даже выиграть славу библиотеки jststate Не помогите. Самое простое решение - добавить правило перезаписи на ваш сервер Nginx или Apache, например:
Apache (в вашем vhost, если вы используете его):
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]
</IfModule>
Nginx
rewrite ^(.+)$ /index.html last;
Ответ 4
Вы можете попробовать Davis.js, он дает вам маршрутизацию в вашем JavaScript с помощью pushState, когда он доступен, и без JavaScript он позволяет вашему серверному коду обрабатывать запросы.
Ответ 5
Вот отличный скриншот на тему Райана Бейтса из railscasts. В конце он просто отключает функцию ajax, если метод history.pushState недоступен:
http://railscasts.com/episodes/246-ajax-history-state
Ответ 6
история HTML5 - это изворотливость.
history.pushState()
не отправляет событие popstate
или загружает новую страницу самостоятельно. Это предназначалось только для того, чтобы подтолкнуть государство к истории. Это функция отмены для одностраничных приложений. Вам необходимо вручную отправить событие popstate
или использовать history.go()
для перехода к новому состоянию. Идея состоит в том, что маршрутизатор может прослушивать события popstate
и выполнять навигацию для вас.
Некоторые примечания:
-
history.pushState()
и history.replaceState()
не отправлять события popstate
.
-
history.back()
, history.forward()
, а кнопки браузера назад и вперед отправляют события popstate
.
-
history.go()
и history.go(0)
выполните полную перезагрузку страницы и не отправляйте события popstate
.
-
history.go(-1)
(назад 1 страница) и history.go(1)
(вперед 1 страница) отправляют события popstate
.
Вы можете использовать API истории, подобный этому, чтобы нажать новое состояние и отправить всплывающее событие.
history.pushState({message:'New State!'}, 'New Title', '/link');
window.dispatchEvent(new PopStateEvent('popstate', {
bubbles: false,
cancelable: false,
state: history.state
}));
Затем слушайте события popstate
с маршрутизатором.
Ответ 7
Вы можете взглянуть на этот плагин jQuery. У них есть много примеров на их сайте. http://www.asual.com/jquery/address/
Ответ 8
Я написал очень простую абстракцию маршрутизатора поверх History.js, называемую StateRouter.js. Он находится на очень ранних стадиях разработки, но я использую его как решение для маршрутизации в одностраничном приложении, которое я пишу. Как и вы, я обнаружил, что History.js очень сложно понять, тем более, что я совершенно новичок в JavaScript, пока не понял, что вам действительно нужна (или должна иметь) абстракция маршрутизации поверх нее, поскольку она решает проблему низкого уровня проблема.
Этот простой пример кода должен продемонстрировать, как он используется:
var router = new staterouter.Router();
// Configure routes
router
.route('/', getHome)
.route('/persons', getPersons)
.route('/persons/:id', getPerson);
// Perform routing of the current state
router.perform();
Вот немного fiddle Я придумал, чтобы продемонстрировать его использование.
Ответ 9
Если jQuery доступен, вы можете использовать jQuery BBQ