2016-05-16 2 views
16

У нас есть приложение, которое в основном имеет дело с фреймов (загружает разные страницы в приложении по запросу)Iframe не загружается в IE после установки обновления KB3154070

Недавно браузер IE был обновлен с KB3154070 (Current IE версии: 11.0.9600.18314) в рамках обновления системы. После этого обновления большинство функций полностью ломается. Он выполнял все страницы, использующие iframes. Содержимое не загружается и приводит к пустой странице. Запрос, по-видимому, прерывается при проверке на сетевой панели, как показано на рисунке ниже. Network Traffic Capture

Мы выполнили следующий поиск неисправностей

Мы убедились, что все теги Iframe близки правильно. src iframe не пуст. Если мы заходим на ту же страницу за пределами (без загрузки в iframe), она работает нормально. Но проблема только в iframe. Как быстро обходной путь к этой проблеме, мы попросили наших пользователей отменить обновление. Но это не ожидаемое решение.

Ваша помощь очень ценится.

С уважением, Свалай.

+2

добавить: в заголовок, это заставит в режим IE 10. также пытайтесь очистить временные файлы Интернета, файлы cookie и историю. – Zaki

+0

Из-за моих экспериментов, похоже, проблема в обработке iframe, когда IE является режимом совместимости. MS изменила что-то в том, как загружается iframe. Как предположил Мэтт, это может быть проблема, связанная с DOM. Ранее IE не разрушал воссоздание iframe при перемещении в режиме совместимости (он работает в режиме стандартов/границ). Если это происходит в совместимости, это может сломать множество устаревших приложений. Я заметил, что изменения в настройках зоны иногда могут по-прежнему работать, но это ненадежно. Я отваживаюсь, что MS представила условие гонки в поддержке поддержки iframe. – ewh

+0

Это не ограничивается обновлением в названии. По состоянию на 15 июня 2016 года последнее обновление также демонстрирует эту проблему. – ekawas

ответ

4

Мы столкнулись с точно такой же проблемой. Проблема в нашем конкретном случае заключалась в том, что iframe теперь прерывают свои запросы, когда они повторно запатентованы (т. Е. Перемещены из одного дерева дерева DOM в другое). Мы смогли обойти новое ограничение, избегая перемещения iframe во время загрузки. Я не могу быть уверен, что это именно то, что происходит в вашем случае, но я бы сказал, что это было какое-то взаимодействие между началом загрузки iframe и его завершением.

+0

Я думаю, что вы на что-то. В моем тестировании я обнаружил, что если iframe пытается вызвать любые скрипты (например, пытается загрузить dojo.js с тегом скрипта), IE «блокирует» его, заставляя тело iframe не существовать. В настоящее время я вижу некоторый успех, удаляя iframe без значения атрибута src. Затем в основном обработчике onload документа я использую javascript для установки iframe src. Кажется, это работает. – ewh

9

@ Ответ Мэтта дает ключ к решению проблемы. Похоже, что IE с установленным KB3154070 блокирует содержимое iframe, если iframe инициирует любые операции сценариев до того, как родительское дерево DOM будет готово. Я заметил, что блокировка не возникает, если ресурс, загруженный iframe, не содержит скриптов. Я также заметил, что иногда IE не будет блокировать контент сценариями, но это, вероятно, связано с условием гонки между родительским DOM, который готов и загрузка ресурсов iframe.

Другое наблюдение - я не видел проблем с загрузкой iframe при запуске IE в режиме edge. Похоже, проблема возникает только при работе в режиме совместимости.

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

Например, у вас есть следующие:

<iframe id="myIFrame"></iframe> 

В обработчике OnLoad, у вас есть что-то вроде:

document.getElementById('myIFrame').src = '/whatever/url/to/load'; 

Я все еще думаю, что KB3154070 ввел регрессионного ошибку (если не ошибки) , но, возможно, то, что я предложил, может быть применено к вашему приложению.

UPDATE

IE обновление KB317016 появляется, чтобы решить проблему IFrame загрузки. Microsoft официально признала ошибку: KB3176757.

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

+0

До этого момента ваше предложение было единственным, что действительно сработало. –

+0

спасибо .. это решил мой проблема. – user1673567

2

Проблема была исправлена ​​в моем случае, установив заголовок совместимости на Edge. С KB3154070 он не работает для режимов документов 7 и 8, но работает для 9, 10 и Edge.

Кроме того, предложение @ewh для установки src после загрузки документа работало нормально. Благодарю.

3

Эта проблема связана с устаревшим программным обеспечением моей компании. Мы придумали следующее общее решение, пока Microsoft не решает эту ошибку:

$(document).ready(function() { 
    loadIframesIE(); 
}); 

function loadIframesIE() { 
    var $iframe; 
    $('iframe').each(function(cnt, iframe) { 
     $iframe = $(iframe); 

     // If the iframe body has no child, it couldn't be loaded 
     if ($iframe.contents().find('body').children().length === 0 && !$iframe.attr('resetted')) { 

      // Necessary to avoid an infinite loop in some cases 
      $iframe.attr('resetted', true); 
      $iframe.attr('src', $iframe.attr('src')); 

     } 
    }); 
} 
Смежные вопросы