Хороший учебник по использованию HTML5 History API (Pushstate?) [закрытый]
Я изучаю использование API истории HTML5 для решения проблем с глубокой связью с загруженным контентом AJAX, но я изо всех сил пытаюсь подняться с земли. Кто-нибудь знает о каких-либо хороших ресурсах?
Я хочу использовать это, поскольку это кажется отличным способом разрешить возможность отправки ссылок, возможно, JS не включен. Многие решения терпят неудачу, когда кто-то с JS отправляет ссылку кому-то без нее.
мое первоначальное исследование, похоже, указывает на историю API внутри JS и метод pushState.
9 ответов:
для отличного урока страница Mozilla Developer Network по этой функциональности-это все, что вам нужно:https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history
к сожалению, API истории HTML5 реализован по-разному во всех браузерах HTML5 (что делает его непоследовательным и ошибочным) и не имеет резервов для браузеров HTML4. К счастью, история.js обеспечивает кросс-совместимость для браузеров HTML5 (обеспечение всех HTML5 браузеры работают так, как ожидалось) и дополнительно предоставляет хэш-резерв для браузеров HTML4 (включая поддерживаемую поддержку данных, заголовков, функций pushState и replaceState).
вы можете прочитать больше об истории.js здесь: https://github.com/browserstate/history.js
для статьи о HASHBANGS VS Hashes VS HTML5 History API, смотрите здесь: https://github.com/browserstate/history.js/wiki/Intelligent-State-Handling
Я много выиграл от "погружения в HTML 5". Объяснение и демонстрация проще и по существу. Глава истории - http://diveintohtml5.info/history.html и история демо -http://diveintohtml5.info/examples/history/fer.html
имейте в виду при использовании HTML5 pushstate если пользователь копирует или закладывает глубокую ссылку и посещает ее снова, то это будет прямое попадание на сервер, которое будет 404, поэтому вам нужно быть готовым к этому, и даже библиотека JS pushstate не поможет вам. Самое простое решение-добавить правило перезаписи на ваш сервер 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;
вы могли бы попробовать Дэвис.js, это дает вам маршрутизацию в вашем JavaScript с помощью pushState, когда он доступен, и без JavaScript он позволяет вашему коду на стороне сервера обрабатывать запросы.
вот отличный экран-бросок на тему Райана Бейтса из railscasts. В конце он просто отключает функциональность ajax, если история.метод pushState недоступен:
The HTML5 history spec изворотливая.
history.pushState()не отправляет apopstateсобытие или загрузить новую страницу под себя. Это было сделано только для того, чтобы подтолкнуть государство в историю. Это функция "отменить" для одностраничных приложений. Вы должны вручную отправить apopstateилиhistory.go()для перехода в новое состояние. Идея заключается в том, что маршрутизатор может слушатьpopstateсобытия и сделать навигацию для вас.некоторые вещи Примечание:
history.pushState()иhistory.replaceState()не направитьpopstateсобытий.history.back(),history.forward(), и кнопки браузера назад и вперед делают dispatchpopstateсобытий.history.go()иhistory.go(0)сделайте полную перезагрузку страницы и не отправляйтеpopstateсобытий.history.go(-1)(назад 1 страница) иhistory.go(1)(вперед 1 страница) do dispatchpopstateсобытий.вы можете использовать историю API, как это, чтобы подтолкнуть новое состояние и отправить события popstate.
слушать
history.pushState({message:'New State!'}, 'New Title', '/link'); window.dispatchEvent(new PopStateEvent('popstate', { bubbles: false, cancelable: false, state: history.state }));popstateсобытия с маршрутизатором.
вы можете взглянуть на этот плагин jQuery. У них есть много примеров на своем сайте. http://www.asual.com/jquery/address/
Я написал очень простую абстракцию маршрутизатора поверх истории.Яш, под названием StateRouter.js. Он находится на очень ранних стадиях разработки, но я использую его в качестве решения для маршрутизации в одностраничном приложении, которое я пишу. Как и ты, я нашел историю.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();здесь скрипка Я придумал, чтобы продемонстрировать его использование.
Если jQuery доступен, вы можете использовать jQuery BBQ
Comments