Как заставить iFrame перезагрузиться после загрузки - PullRequest
4 голосов
/ 21 октября 2011

У меня есть множество фреймов, которые загружают определенный контент на мои страницы. И родитель, и iframe находятся в одном домене.

У меня есть полоса прокрутки внутри iframe, которая, кажется, не загружается правильно во всех браузерах. Но когда я обновляю iframe, он загружается идеально. Я понятия не имею, почему он это делает.

Я использовал мета-обновление, которое работает, но я не хочу, чтобы страница обновлялась постоянно, только один раз.

Решение, которое я ищу, перезагрузит содержимое iFrame после его открытия с минимальной задержкой.

Спасибо за ваше время и помощь!

-Brett

---------- EDIT: --------

Я понял, что моя страница загружает все мои фреймы при загрузке индекса. Фреймы iframe появляются в оверлее jQuery, которое также загружается, но видимость: скрыта до вызова. Так что по этому вызову я бы хотел перезагрузить iframe.

Может ли кто-нибудь помочь мне придумать функцию Javascript, которая перезагружает iFrame, когда я щелкаю ссылку на iFrame? Я близко, но я ничего не знаю о JS, и я продолжаю терпеть неудачу. У меня есть функция, которая перезагружает страницу, но я не могу понять, как вызвать ее только один раз.

Пока у меня есть это:

<script type="text/javascript">

var pl;
var change;
pl=1;

function ifr() {

if (pl=1) {
    document.location.reload([true]);
    alert("Page Reloaded!");
    change=1;
    return change;
}

change+pl;

}

Так что в основном он использует document.location.reload, который работает для перезагрузки страницы. Я пытаюсь затем изменить pl на что-то, отличное от 1, чтобы функция больше не запускалась. Я звонил этому JS из тела с onLoad.

Ответы [ 4 ]

8 голосов
/ 08 декабря 2011

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

<div class="overlay-content"> //Content container needed for CSS Styling



     <div id="Reloader"> //iFrame will be reloaded into this div

     </div>



           //Script to reload the iframe when the page loads
         <script>
            function aboutReload() { 
              $("#Reloader").html('<iframe id="Reloader" height="355px" width="830px" scrolling="no" frameborder="0" src="about.html"></iframe>');
            }
         </script>



</div>

По сути, просто загружается источник iFrame при открытии окна с iFrame, а не загрузка iFrame при загрузке исходной страницы.

3 голосов
/ 03 января 2014

За рамками исходного вопроса, однако этот фрагмент кода jQuery работает с междоменными iframe элементами, для которых метод contentDocument.location.reload (true) не будет связан с песочницей.

//assumes 'this' is the iframe you want to reload.
$(this).replaceWith($(this).clone()); //Force a reload

По сути, он заменяет весь элемент iframe своей копией. Мы используем его для принудительного изменения размера встроенных сторонних «тупых» виджетов, таких как видеоплееры, которые не замечают изменения их размера.

2 голосов
/ 25 октября 2011

Вот полное решение исходного вопроса:

<iframe onload="reloadOnce(this)" src="test2.html"></iframe>
<script>
var iframeLoadCount = 0;
function reloadOnce(iframe) {
  iframeLoadCount ++;
  if (iframeLoadCount <= 1) {
    iframe.contentWindow.location.reload();
    console.log("reload()");
  }
}
</script>

Обновленный вопрос не совсем понятен (что такое "ссылка на iFrame" и где она находится в вашем фрагменте?), Но у вас естьнесколько проблем с кодом:

  • «вызов этого JS из тела с помощью onLoad», предполагая, что вы имеете в виду тело iframe, означает, что переменная, которую вы надеетесь использовать, чтобы избежать бесконечной перезагрузки, будет перекрытавместе с остальной частью страницы iframe, когда он будет перезагружен.Вам нужно либо загрузить немного другой URL-адрес в iframe (и проверить URL-адрес при загрузке iframe перед перезагрузкой), либо поместить переменную flag на внешнюю страницу (и обращаться к ней с помощью parent. variableName - это должноработа, я думаю)
  • if (pl=1) { следует использовать ==, поскольку = всегда является назначением.
  • change+pl; не имеет никакого эффекта.
2 голосов
/ 21 октября 2011

На самом элементе iframe установите onload:

iframe.onload = function() {this.contentWindow.location.reload(); this.onload = null;};

(Работает, только если местоположение iframe находится в том же домене, что и главная страница)

...