Динамический iframe иногда не загружается в Firefox - PullRequest
6 голосов
/ 17 ноября 2010

У меня есть некоторый код JavaScript, который динамически внедряет iframe в заданную HTML-страницу.К сожалению, в Firefox и только в Firefox, хотя iframe время от времени создается, соответствующий URL не загружается в него.

Я знаю, что он не был загружен, потому что соответствующий URL не появляется на вкладке Firebug Net, и когда я проверяю iframe, я не вижу там никакого ожидаемого HTML-кода (когда iframe включентот же домен, что и на предыдущей странице).Я не вижу ни ошибок JavaScript, ни сетевых ошибок.

Вот фрагмент кода, я проверил правильность всех соответствующих переменных:

    var iframe = document.createElement("iframe");
    iframe.width = options["w"];
    iframe.height = options["h"];
    iframe.scrolling = "no";
    iframe.marginWidth = 0;
    iframe.marginHeight = 0;
    iframe.frameBorder = 0;
    iframe.style.borderWidth = 0;

    if (node.childNodes.length > 0) 
        node.insertBefore(iframe, node.childNodes[0]);
    else 
        node.appendChild(iframe);

    iframe.contentWindow.location = iframeSrc + "?" + querystring;

Вот пример URL, который установлендля iframe (проблема также воссоздается, когда URL-адрес указывает на внешний сервер, пришлось пропустить 'http://' в начале, иначе я не смог бы опубликовать вопрос):

127.0.0.1:8000/widget/iframe/index.html?style=slide-top-to-bottom&culture_code=en_us&c=26&sc=1324&title=Top%20News&caption=Top%20Stories&order=relevance&count=20&w=250&h=300&timestamp=true&scrollbar=false&theme=ui-lightness&className=8815455464592103&referrer=http%3A%2F%2F127.0.0.1%3A8000%2Fwidget%2Fbuilder%2Findex.html

Проводим некоторые исследованияВ Интернете я обнаружил эту нефиксированную ошибку Firefox, которая, кажется, связана с этой проблемой: https://bugzilla.mozilla.org/show_bug.cgi?id=279048

После прочтения ошибки я попробовал несколько решений, ни одно из которых не решило проблему:

  • Установка iframe.src вместо iframe.contentWindow.location
  • Добавление случайного параметра в строку запроса
  • Добавление символа '#' со случайным числом в конце URL
  • Присвоение iframe случайного имени

У кого-нибудь есть обходной путь для этой раздражающей ошибки Firefox?Или проблема, которую я описываю, не связана с ошибкой и имеет другое решение?

Ответы [ 2 ]

5 голосов
/ 17 ноября 2010

Что произойдет, если вы добавите это в конец вашего скрипта?

iframe.contentWindow.location.reload(true);

Возможно, это остановит необходимость перезагрузки в FF.

EDIT

Исправлен пример

1 голос
/ 17 ноября 2010

Решил проблему, искал не в том месте. Файл HTML, в который был загружен этот динамический iframe, содержал пустой тег iframe, который был удален из DOM, после чего вместо него был введен динамический iframe.

Очевидно, что Firefox кэшировал последний URL для этого iframe и загружал его сразу же после загрузки внешней страницы. Я знаю, потому что видел, как соответствующий HTML-файл загружался дважды на вкладке Firebug Net, а не один раз при внедрении.

После того как я избавился от этого пустого тега iframe и полагался только на введенный iframe, все стало работать хорошо, и проблема больше не воспроизводилась. Я полагаю, что Firefox не любил обрабатывать этот сценарий, может быть, какая-то ошибка?

В любом случае, спасибо за помощь, это вдохновило меня на правильное решение:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...