Подтвердить что ты не робот

Перезагрузите IFRAME без добавления в историю

Я меняю IFRAME src, чтобы перезагрузить его, его работоспособность и запуск события onload при загрузке HTML.

Но он добавляет запись в историю, которую я не хочу. Есть ли способ перезагрузить IFRAME и все же не повлиять на историю?

4b9b3361

Ответ 1

Вы можете использовать javascript location.replace:

window.location.replace('...html');

Заменить текущий документ на один по предоставленному URL. отличие от метода assign() что после использования replace() текущий страница не будет сохранена в сеансе история, то есть пользователь не будет возможность использования кнопки "Назад" для перейдите к нему.

Ответ 2

Использование replace() - это только опция с вашими собственными доменными iframes. Он не работает на удаленных сайтах (например: кнопка щебета) и требует определенных знаний, связанных с браузером, для надежного доступа к дочернему окну.

Вместо этого просто удалите элемент iframe и создайте новый в том же месте. Элементы истории создаются только при изменении атрибута src после того, как он находится в DOM, поэтому обязательно установите его перед добавлением.

Изменить: JDandChips справедливо упоминает, что вы можете удалить из DOM, modifiy и повторно добавить. Построение свежего не требуется.

Ответ 3

Как сказал Грег выше, функция .replace() - это как это сделать. Я не могу понять, как ответить на его ответ *, но трюк заключается в ссылке на свойство iFrames contentWindow.

var ifr = document.getElementById("iframeId");
ifr.contentWindow.location.replace("newLocation.html"); 

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

Ответ 4

Альтернативным методом воссоздания iframe будет удаление iframe из DOM, изменение src и последующее добавление его.

Во многом это похоже на предложение replace(), но у меня были некоторые проблемы, когда я попытался использовать этот подход с History.js и вручную управлять состояниями.

var container = iframe.parent();

iframe.remove();
iframe.attr('src', 'about:blank');

container.append(iframe);

Ответ 5

Одним из решений является использование тега object, а не тега iframe.

Замените это:

<iframe src="http://yourpage"/>

Таким образом:

<object type="text/html" data="http://yourpage"/>

позволит вам обновить атрибут data, не затрагивая историю. Это полезно, если вы используете декларативную структуру, такую ​​как React.js, где вы не должны выполнять какую-либо императивную команду для обновления DOM.

Подробнее о различиях между iframe и object: Использование тега Iframe или Object для встраивания веб-страниц в другое

Ответ 6

Попробуйте использовать эту функцию для замены старого iframe новым iframe, который скопирован из старого:

function setIFrameSrc(idFrame, url) {
    var originalFrame = document.getElementById(idFrame);
    var newFrame = document.createElement("iframe");
    newFrame.id = originalFrame.getAttribute("id");
    newFrame.width = originalFrame.getAttribute("width");
    newFrame.height = originalFrame.getAttribute("height");
    newFrame.src = url;    
    var parent = originalFrame.parentNode;
    parent.replaceChild(newFrame, originalFrame);
}

Используйте его следующим образом:

setIFrameSrc("idframe", "test.html");

Этот путь не добавит URL-адрес iframe в историю браузера.

Ответ 7

Используйте метод replace, чтобы обойти добавление URL-адреса iframe в историю:

HTML:

<iframe id="myIframe" width="100%" height="400" src="#"></iframe>

JavaScript:

var ifr = document.getElementById('mIframe')
if (ifr) {
  ifr.contentWindow.location.replace('http://www.blabla.com')
}

Ответ 8

Самое простое и быстрое загрузочное решение
Используйте window.location.replace, чтобы не обновлять историю при загрузке страницы или фрейма.

Для ссылок это выглядит так:

<a href="#" onclick="YourTarget.location.replace ('http://www.YourPage.com');">
The targeted Link</a>

или

<a href="javascript:YourTarget.location.replace ('http://www.YourPage.com');">
The targeted Link</a>



Но, если вы хотите, чтобы он не действовал со ссылкой, но чтобы действовать автоматически при загрузке фрейма, а затем из iframe вы должны поместить его в раздел тела файла iframe:

onload="window.location.replace ('http://www.YourPage.com');"


Если по какой-то причине onload не загружается в iframe, тогда вместо синтаксиса введите в качестве синтаксиса имя целевого фрейма, например:

onload="YourTarget.location.replace ('http://www.YourPage.com');"



ПРИМЕЧАНИЕ.. Для этого script будут работать все onclick, onmouseover, onmouseout, onload и href="javascript:".

Ответ 9

Ответ JDandChips у меня работал на iframe перекрестного происхождения (youtube), вот он в vanilla JS (без JQuery):

const container = iframe.parentElement;

container.removeChild(iframe);

iframe.setAttribute('src', 'about:blank');

container.appendChild(iframe);