Ответ 1
Простое добавление поддержки истории на ваш сайт никоим образом не поможет вам, если у вас действительно есть функции, которые используют его.
Что касается модернизации, это просто говорит вам, поддерживается ли история в текущем браузере, и если вы выполняете действие x else action y
Хорошо, так вот как будет работать история:
Рассмотрим history.js
как макрорекордер. Клиент нажимает что-то, и вы нажимаете некоторые переменные, которые вы связываете с составленным или реальным URL:
Клиент нажимает на поиск, например:
function search(params) {
// record your current UI position
// data (to save), title (to set on page), url (to set on page)
History.pushState({ params: params }, "Search", "?search");
// now run whatever should happen because client triggered search()
}
И теперь, когда клиент нажимает кнопку "Назад", вы можете получить ранее сохраненное состояние, чтобы что-то сделать с ним. Поскольку клиент попадает в его подлокотник, он вызывает statechange
. И поскольку вы подписаны на это событие, вы можете определить, какое состояние вы ранее сохранили, и вызвать функции для изменения пользовательского интерфейса соответственно.
// Bind to StateChange Event
History.Adapter.bind(window, 'statechange', function() {
var State = History.getState();
// returns { data: { params: params }, title: "Search": url: "?search" }
console.log(State);
// or you could recall search() because that where this state was saved
if (State.url == "?search") {
search(data.params);
}
});
Это в значительной степени подводит итог. Клиент запускает функцию, вы назначаете state/url
, а когда клиент щелкает назад, вы просматриваете свое предыдущее состояние и запускаете функции в зависимости от того, хотите ли вы восстановить пользовательский интерфейс или другое.
Это может быстро стать сложным и сложным кодом, и я не понимаю, что еще нужно объяснить, поэтому, если вы просто не получили AHA! и теперь знаю, что делать, я бы просто забыл об этом сейчас.
Абсолютно ничего не происходит автоматически в отношении состояний saving/restoring
, все остальное в вашем приложении должно быть закодировано вручную, чтобы учесть, что произойдет, если состояние изменится.
Также глубокая связь не имеет ничего общего с этими вещами. Ваше приложение должно иметь возможность инициализировать себя и отображать определенные элементы пользовательского интерфейса однозначно на основе вызова его напрямую через URL-адрес. История предназначена исключительно для управления состоянием, когда пользователи уже используют ваше приложение, поэтому вы можете контролировать, что происходит, когда они нажимают кнопку back/forward
.
И все, что происходит через JS, даст вам нулевые преимущества в отношении поисковых систем, поскольку они не заботятся о js и будут просто индексировать необработанный текст вашей страницы. Поэтому, если вам нужна глубокая привязка к поисковой системе, вам нужен код на стороне сервера, который отображает ваш пользовательский интерфейс в определенном состоянии в зависимости от запрошенного URL.