браузер back действует на вложенный iframe перед самой страницей - есть ли способ избежать этого? - PullRequest
28 голосов
/ 11 февраля 2010

У меня есть страница с динамическими данными, загруженными некоторыми ajax и множеством javascript.

страница содержит список, из которого пользователь может выбирать, и каждое выбранное значение загружает новые данные на страницу.

Одним из этих элементов данных является URL, предоставленный для iframe.

Я использую jQuery BBQ: кнопка «Назад» и библиотека запросов для имитации поведения браузера назад.

Все работает хорошо, за исключением того факта, что когда я нажимаю кнопку «Назад» в первый раз, iframe возвращается на прежнее место, а затем мне нужно снова щелкнуть назад, чтобы страница вернулась.

Есть ли способ отключить поведение назад в iframe?

Ответы [ 5 ]

54 голосов
/ 13 февраля 2010

Я нашел ответ на мою проблему, думаю, это может быть полезно для других.

Проблема была в том, как я назначил новые URL-адреса для своего Iframe, я использовал Jquery, поэтому это выглядело примерно так:

$('#myIFrame').attr('src',newUrl);

При назначении URL-адреса таким образом добавляется новая запись в список посещенных URL-адресов браузера, к которой можно вернуться.
Это было нежелательное поведение, поэтому после некоторого поиска в Google я обнаружил, что вы можете назначить новый URL-адрес для объекта Iframe, не добавляя его в «черный список», это выглядит так:

var frame = $('#myIFrame')[0];  
frame.contentWindow.location.replace(newUrl);

Таким образом, кнопка «Назад» ведет себя точно так, как и ожидалось.

Кстати, я получил ответ от здесь .

Надеюсь, это помогло вам так же, как и мне.

4 голосов
/ 24 августа 2017

Принятый ответ не работает, если вы пытаетесь установить междоменный 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);
1 голос
/ 27 августа 2014

Я предлагаю вам создать гиперссылку в вашем фрейме. назовите его «Назад» и укажите href как javascript: history.back (-1) Это лучшее, что вы можете сделать, я думаю.

0 голосов
/ 12 апреля 2016

По сути, вам нужно предотвратить добавление новых записей истории в iframe, в большинстве случаев будет работать history.replaceState , введенная в HTML5.

history.pushState(state, title, url);
0 голосов
/ 13 февраля 2010

Нет, это полностью зависит от браузера.

...