Как указано в заголовке, когда я использую pushState () для изменения истории, он по какой-то причине добавляет мою запись в стек дважды, даже если щелкнул только один раз. Итак, когда я пытаюсь вернуться назад с помощью кнопки «Назад», я получаю всплывающее сообщение только при каждом втором нажатии кнопки. И когда я регистрирую состояние в консоли, каждый раз, когда я получаю «всплывающее сообщение», он показывает «ноль».
Вот как выглядит история:
http://example.com/foo/bar/question/8/ http://example.com/foo/bar/question/8/ http://example.com/foo/bar/question/3/ http://example.com/foo/bar/question/3/ http://example.com/foo/bar/question/27/ http://example.com/foo/bar/question/27/
Я пытаюсь перезагрузить iframe (и изменить текст h1) при щелчке по ссылке, не перезагружая всю страницу, но при этом сохранив историю, которую можно перемещать и добавлять в закладки (это слово?) ... Похоже, это должно быть будь простым, и я просмотрел примеры на MDN и других руководствах, но безрезультатно.
Мой код ниже. Я уверен, что делаю что-то совершенно не так, но любая помощь / понимание будут очень благодарны!
$(".vidlinks a").on('click', function(e) {
var frsrc = 'https://player.vimeo.com'+$(this).attr('data-iframe')+'?title=0&byline=0&portrait=0&badge=0&autopause=0&player_id=0&autoplay=1',
targetUrl = $(this).attr('href'),
pgtitle = $(this).attr('title'),
obj = {url:targetUrl,ttl:pgtitle};
$("iframe").attr('src', frsrc );
$(".vidtitle h1").fadeOut("fast", function() {
$(this).text(pgtitle);
});
$(".vidtitle h1").fadeIn("fast");
window.history.pushState(obj, document.title, targetUrl);
return false;
});
window.onpopstate = function(e) {
$(".vidtitle h1").fadeOut("fast", function() {
$(this).text(e.state.ttl);
});
$(".vidtitle h1").fadeIn("fast");
}
РЕДАКТИРОВАТЬ: Я также пробовал использовать replaceState () вместо pushState (). Такой способ устранил проблему двойной записи, но использование кнопки «Назад» не меняет состояние в браузере с использованием этого метода. Это было протестировано в Chrome, Safari и FF.
РЕДАКТИРОВАТЬ РЕДАКТИРОВАТЬ: Как ни странно, если я полностью закомментирую оператор pushState () и нажму кнопку «Назад», iframe перезагрузится к предыдущему видео, но больше ничего не изменится.
3 (РЕДАКТИРОВАТЬ): Вот код iframe ...
<iframe src="https://player.vimeo.com/video/VIDEOID?title=0&byline=0&portrait=0&badge=0&autopause=0&player_id=0&autoplay=1" width="1920" height="1080" frameborder="0" title="THETITLE" webkitallowfullscreen="" mozallowfullscreen="" allowfullscreen=""></iframe>
VIDEOID
и THETITLE
- это просто строки, изначально переданные из PHP.
На этот раз я запустил console.log, и вот что он делает. Я щелкаю ссылку (один раз), которая передает новый iframe src в iframe, но при этом создаются две записи в истории. При первом нажатии кнопки «Назад» окно iframe перезагружается к предыдущему видео, но без всплывающего сообщения. При втором нажатии кнопки «назад» я получаю всплывающее сообщение со всеми свойствами.
e.preventDefault()
..return false
делает то же самое, но стоит спросить - person charlietfl   schedule 28.09.2016return false
- person Spartacus   schedule 28.09.2016debugger
илиconsole.log
подwindow.history.pushState
, чтобы подтвердить, что push вызывается только один раз за клик. Если возможно, не могли бы вы опубликовать большую часть кода вместе с HTML. - person Gökhan Kurt   schedule 01.10.2016