я использовал (https://github.com/browserstate/history.js) и есть кусок кода, как этотбраузера назад и вперед кнопка не вызывает метод обратного вызова с StateChange случае history.js
History.Adapter.bind(window, 'statechange', function() {
var State = History.getState();
alert('Inside History.Adapter.bind: ' + State.data.myData);
});
function manageHistory(url, data, uniqueId){
var History = window.History;
if (!History.enabled) { return false; }
History.replaceState({myData: data}, null, '?stateHistory=' + uniqueId);
}
, если я призываю manageHistory()
после моего AJAX вызова, то History.Adapter.bind
метод обратного вызова вызывается правильно. Однако, если я нажму кнопку браузера, а затем нажмите кнопку переадресации, то приведет к навигации по страницам от B до A, затем A обратно к B, метод обратного вызова внутри History.Adapter.bind
не вызывается. Это происходит как на хром, так и на IE9. Кто-нибудь знает, как исправить эту проблему, мне нужно получить State
после браузера кликов, а затем переслать, чтобы обновить DOM. Пожалуйста, помогите
Примечание: Я использую версию 1.7.1 jquery.history.js для html4 браузера IE9
UPDATE (3 мая 2013): Поговорим немного о моем требовании
Sorry Я был занят другой задачей, что до сих пор мне иногда приходится смотреть на эту проблему. Итак, oncomplete
вызова ajax, я взял ту информацию, которая вернулась ко мне, и вытолкнул ее в состояние. Мое требование: если я перемещаюсь со страницы А на страницу В, а затем на странице В, я выполняю число запросов ajax, которые приводят к манипуляции с DOM (позвольте каждому из запросов ajax, которые приводят к манипулированию DOM, state
). Если я нажму кнопку «Назад», я вернусь на страницу А, и если я нажму кнопку «Вперед», я должен перейти на страницу В с последним состоянием, в котором я был.
Итак, моя мысль была, oncomplete
моих ajax, я бы заменил последнее состояние в истории моим текущим состоянием (мой json-объект - это html, который я получаю обратно из запроса ajax). Если я использую состояние нажатия, скажем, я на странице B, и я нажимаю одну кнопку, моя страница теперь меняется на aaa
, я нажимаюState aaa
. Затем, если я нажму другую кнопку, моя страница теперь изменится на bbb
, я нажимаюState bbb
. Если я сейчас нажму кнопку «Назад», я все равно буду на странице B, с моим состоянием в History.Adapter.bind(window, 'statechange', function() {})
показать как aaa
, если я снова нажму кнопку «Назад», я перейду на страницу А. Я не хочу этого поведения. Я хочу, чтобы, если я на странице B с состоянием bbb
, и нажмите обратно, я перейду на страницу A, и если я нажму вперед, я перейду на страницу B с состоянием bbb
. Надеюсь, это имеет смысл. Пожалуйста, помогите
Re: Ваше обновление - Я думаю, что вы не хотите использовать историю, чтобы отслеживать «изменения состояния» в пределах страницы B/A. используйте историю использования вместе с изменением вашего URL-адреса. Любое изменение состояния в пределах одного URL-адреса (то есть A vs B) должно сохранять состояние другим механизмом (а не с помощью history.replaceState(); ... Это очень легко сделать с библиотекой MV *, например с базовой или угловой. – 1nfiniti
jquery-mobile, у них есть ajaxy способ обработки страниц, которые могут вам пригодиться: http://jquerymobile.com/ – euxneks