IE9 выдает исключения при загрузке скриптов в iframe. Зачем?
Предпосылка:
У меня есть aspx-страница с iframe внутри. Этот iframe указывает на URL-адрес, обрабатываемый MVC на том же сайте (это гибридный сайт, как стандартный ASP.NET, так и ASP.NET MVC). Результирующая страница, созданная MVC, содержит множество ссылок на скрипты.
Проблема:
IE9 выдает исключение на каждом отдельном script загрузке в iframe. Эти исключения аналогичны этому:
Error: 'Function' is undefined
То есть, он говорит, что самые основные вещи, которые есть у каждого окна, как-то отсутствуют. После того, как вы щелкнули по всем этим всплывающим окнам, страница будет работать так, как было разработано!
Если я загружаю URL-адрес из атрибута <iframe />
src в браузере напрямую, все работает так, как ожидалось.
Если я открою страницу в другом браузере (я попробовал Opera, Firefox), все работает как ожидалось - никаких ошибок.
Итак, что хочет IE9?
Ответы
Ответ 1
эта страница msdn об этой ошибке (или функции).
Вы получаете такие ошибки при перемещении элемента iframe в DOM. В таких случаях мусор IE 9 собирает iframe (вызывая ошибку undefined) и перезагружает его в другой позиции.
В общем, вы должны создать элемент, установить его атрибут src
только один раз, а затем поместить его где-нибудь в дерево DOM один раз. Это не имеет никакого отношения к коду, который выполняется в самом iframe.
Ответ 2
Я столкнулся с такой же ситуацией в дикой природе. Основные симптомы:
- Вы загружаете код script в iframe
- Код script запускается раньше (из главы или верхней части тела)
- IE жалуется на некоторый отсутствующий собственный объект
Я обнаружил, что его часто можно предотвратить, задерживая выполнение кода script до onload или DOMContentLoaded... Не так много полезной информации, но это одна из самых сложных ошибок сценариев IE, с которыми я когда-либо сталкивался. Я поднял оценку вашего вопроса, надеюсь, что он будет найден и другими, и мы сможем получить более подробный ответ.
Также см. этот вопрос:
Ошибка в Internet Explorer 9 (не более ранние версии или другие браузеры) при включении jQuery в iframe
Ответ 3
Размещение следующего блока script в самой верхней части iFrame html <head> похоже, разрешает проблему в моем случае. В основном, это заставляет iframe перезагружать, что, как указывали некоторые, решает проблему. Это кажется относительно безопасным, потому что без таких вещей, как "Объект" и "Дата", javascript практически бесполезен.
<script type="text/javascript">
if(typeof(Object)==="undefined"){
window.location.reload();
}
</script>
Ответ 4
Попробуйте загрузить javascript в конце после загрузки полной веб-страницы. Я чувствую, что script выполняется даже до того, как iframe полностью загружен.
для некоторого предложения сценариев в IE9 просмотрите данную ссылку ниже http://blogs.msdn.com/b/ie/archive/2010/06/25/enhanced-scripting-in-ie9-ecmascript-5-support-and-more.aspx
Ответ 5
Дальнейшее исследование показало, что решение состоит в том, чтобы добавить нарушающий iframe к нему dom location перед установкой атрибута src.
После установки 'src' изменение местоположения iframe в стеке DOM заставляет IE9 собирать мусор.
После установки 'src', iframe может быть изменен и изменен с помощью css-позиционирования, но не может изменить относительное местоположение в стеке DOM.
Часто, плагины, такие как диалоги и лайтбоксы, заполняют iframe с помощью src, уже установленного в dom, затем append/prepend или что-то еще, запуская GC.
Ответ 6
function waitForjQuery(){
if(typeof jQuery!='undefined'){
//Do yor stuff!
}
else{
setTimeout(function(){
waitForjQuery();
},500);
}
}
waitForjQuery();