Подтвердить что ты не робот

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?

4b9b3361

Ответ 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();