Браузер обращается к вложенному iframe перед самой страницей - есть ли способ избежать этого?
У меня есть страница с динамическими данными, загружаемыми некоторыми ajax и множеством javascript.
страница содержит список, из которого пользователь может выбрать, и каждое выбранное значение загружает новые данные на страницу.
Один из этих элементов данных - это URL-адрес, предоставляемый iframe.
Я использую jQuery BBQ: Back Button и Библиотека запросов, чтобы имитировать поведение браузера.
Все работает хорошо, кроме того, что когда я впервые нажимаю кнопку "Назад", iframe возвращается в свое предыдущее местоположение, а затем мне нужно снова щелкнуть назад, чтобы вернуть страницу.
Есть ли способ отключить поведение iframe?
Ответы
Ответ 1
Я нашел ответ на вопрос, что он может быть полезен другим.
Проблема заключалась в том, как я назначил новые URL-адреса для моего iframe, я использовал Jquery, чтобы он выглядел примерно так:
$('#myIFrame').attr('src',newUrl);
При назначении URL таким образом он добавляет новую запись в список посещенных URL-адресов браузера, чтобы вернуться к.
Это не было желательным поведением, поэтому после некоторых поисковых запросов я обнаружил, что вы можете назначить новый URL-адрес объекту Iframe без добавления его в "back-list", он выглядит так:
var frame = $('#myIFrame')[0];
frame.contentWindow.location.replace(newUrl);
Таким образом, моя кнопка назад ведет себя точно так, как ожидалось.
btw, я получил ответ от здесь.
Надеюсь, это было полезно для вас, как и для меня.
Ответ 2
Я предлагаю вам создать гиперссылку в вашем iframe. назовите его "Назад" и поставьте href как javascript: history.back(-1). Лучшее, что вы можете сделать, я думаю.
Ответ 3
Принятый ответ не работает, если вы пытаетесь установить междоменный URL для IFrame. В качестве обходного пути я отключил IFrame из DOM перед установкой src
(используя jQuery).
// remove IFrame from DOM before setting source,
// to prevent adding entries to browser history
var newUrl = 'http://www.example.com';
var iFrame = $('#myIFrame');
var iFrameParent = iFrame.parent();
iFrame.remove();
iFrame.attr('src', newUrl);
iFrameParent.append(iFrame);
Ответ 4
В основном вам нужно предотвратить добавление новых записей истории в iframe, history.replaceState, представленный в HTML5, будет работать в большинстве случаев.
history.pushState(state, title, url);
Ответ 5
Нет, это полностью зависит от браузера.