Как я могу остановить перезагрузку IFrame при изменении его положения в DOM? - PullRequest
15 голосов
/ 10 февраля 2010

Есть ли какой-нибудь способ остановить загрузку содержимого Iframe, когда я изменяю его положение в DOM? Простой пример:

<script type="text/javascript">
function moveiframe() {
    var dest = document.getElementById('newparent');
    dest.appendChild(document.getElementById('googleframe'));
}
</script>
<iframe src="http://www.google.com" id="googleframe"></iframe>
<input type="button" onclick="moveiframe()" value="Move" />

нажатие кнопки «Переместить» изменяет родительский элемент iframe и перезагружает его содержимое (в Firefox и Chrome, но не в IE).

Любые предложения будут высоко оценены!

[Обновлено с фоновой информацией]

Я загружаю рекламу сайта в div-заполнителях внизу страницы (чтобы загрузка рекламы не задерживала загрузку страницы) - и затем смещаю div, в которые они были записаны, в правильный контейнер после загрузки. Все это прекрасно работает ... если только в рекламе, которая получает показ, используется iframe (например, google adsense), в этом случае объявление загружается дважды, а показ не выполняется.

Ответы [ 5 ]

11 голосов
/ 10 февраля 2010

Учитывая простоту вашего тестового примера, похоже, что единственные методы, которые вы можете использовать для помещения элемента внутри другого, всегда заставляют содержимое перезагружаться.

[ Edit ] После просмотра того, что вы пытаетесь сделать, есть несколько вещей, которые вы можете попробовать:

  1. Все объявления могут размещаться в IFRAME (на вашем собственном сайте), которые не будут задерживать загрузку страницы и могут быть сразу же размещены в нужном месте.
  2. Как уже упоминалось выше, IFRAME не будут задерживать загрузку страницы, поэтому вы можете сразу же разместить объявления на месте, если они IFRAME, и загрузить их внизу, если они являются чем-то другим. Конечно, это не сработает, если медленная часть раньше, чем вы узнаете, собираетесь ли вы получить IFRAME или нет.
  3. Вы можете сохранить содержимое в его заполнителе DIV, но когда загрузка будет завершена, просто измените положение (с абсолютным позиционированием CSS) в нужном месте на странице. Не самое элегантное решение, но должно работать нормально.
2 голосов
/ 10 февраля 2010

Я сожалею о своем первоначальном ответе, поскольку он, кажется, вызывает другие головные боли. Вот несколько других потенциальных решений, которые вы, возможно, не пробовали:

  • Поместите рекламные сценарии в div с их стилем display, установленным на none. Затем переместите их к их окончательному назначению и измените их на display: block после загрузки страницы. Возможно, это помешает iframe s загружать свой контент изначально.
  • Попробуйте сделать то же самое, только с visibility, установленным на hidden, затем измененным на visible.
1 голос
/ 10 февраля 2010

Если объявления имеют фиксированный размер, вы можете разместить их в абсолютно позиционированных элементах. Затем, как только страница загрузится, вы можете переместить эти элементы контейнера в назначенные им места. Существует множество примеров Javascript для расчета абсолютной позиции по относительной позиции. Конечно, вам нужно было бы зарезервировать место визуально в пунктах назначения, чтобы реклама не покрывала контент.

1 голос
/ 10 февраля 2010

Быстрое предположение состоит в том, чтобы сбросить значение атрибута src элемента iframe или установить его равным "about: blank".

Вы можете восстановить предыдущее значение (или любое другое значение) атрибута src в iframe (используя JavaScript).

С уважением,

0 голосов
/ 10 февраля 2010

Как насчет использования ajax-запроса для загрузки содержимого объявления и добавления содержимого в DOM при возврате вызова ajax вместо использования iframe?

...