IE9 генерирует исключения при загрузке скриптов в iframe.Зачем? - PullRequest
27 голосов
/ 05 декабря 2011

Предпосылка:

У меня есть aspx-страница с iframe внутри. Этот iframe указывает на URL, обрабатываемый MVC на одном сайте (это гибридный сайт, как стандартный ASP.NET, так и ASP.NET MVC). Полученная страница, обработанная MVC, содержит множество ссылок на скрипты.

Проблема:

IE9 генерирует исключение для каждого скрипта, который он загружает в iframe. Эти исключения похожи на это:

Error: 'Function' is undefined

То есть, это говорит о том, что самые основные вещи, которые есть в каждом окне, так или иначе отсутствуют. После того, как вы нажали все эти всплывающие окна, страница просто работает, как задумано!
Если я загружаю URL-адрес из атрибута <iframe /> src в браузере напрямую, все работает как положено.
Если я открываю страницу в другом браузере (я пробовал Opera, Firefox), все работает как положено - без ошибок.

Итак, чего хочет IE9?

Ответы [ 6 ]

28 голосов
/ 31 декабря 2011

Существует эта страница MSDN об этой ошибке (или функции).

Вы получаете такие ошибки, когда перемещаете элемент iframe в DOM.В таких случаях мусор IE 9 собирает iframe (вызывая вашу неопределенную ошибку) и перезагружает его в другую позицию.

В общем, вы должны создать элемент, установить его атрибут src только один раз и затем поместите его где-нибудь в дерево DOM один раз .Он не имеет ничего общего с кодом, который запускается в самом iframe.

2 голосов
/ 29 марта 2012

Размещение следующего блока скрипта в самом верху HTML-кода iFrame , похоже, решает проблему в моем случае. По сути, это заставляет iframe перезагружаться, что, как отмечают некоторые, решает проблему. Кажется, это относительно безопасно, потому что без таких вещей, как «Объект» и «Дата», JavaScript практически бесполезен.

<script type="text/javascript">
    if(typeof(Object)==="undefined"){
        window.location.reload();
    }
</script>
2 голосов
/ 30 декабря 2011

Я столкнулся с такой же ситуацией в дикой природе.Основные симптомы:

  • Вы загружаете код скрипта в iframe
  • Код скрипта запускается рано (из головной части или верхней части тела)
  • IE жалуется на некоторыеотсутствует собственный объект

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

Также см. Этот вопрос: Ошибка в Internet Explorer 9 (не более ранние версии илидругие браузеры) при включении jQuery в iframe

1 голос
/ 05 апреля 2012

Дальнейшее исследование показало, что решение состоит в том, чтобы добавить нарушающий iframe к его месту нахождения ПЕРЕД настройкой атрибута 'src'.

После установки src изменение местоположения iframe в стеке DOM вынуждает IE9 собирать мусор.

Как только src установлен, iframe может быть изменен и изменен с помощью позиционирования css, но не может изменить относительное местоположение в стеке DOM.

Часто плагины, такие как диалоги и лайтбоксы, вставляют iframe с src, уже установленным в dom, затем добавляют / prepend или что-то еще, запуская GC.

1 голос
/ 05 января 2012

Попробуйте загрузить JavaScript в конце после полной загрузки веб-страницы. Я чувствую, что скрипт выполняется еще до полной загрузки iframe.

для некоторых предложений по написанию скриптов в IE9 см. Приведенную ниже ссылку http://blogs.msdn.com/b/ie/archive/2010/06/25/enhanced-scripting-in-ie9-ecmascript-5-support-and-more.aspx

0 голосов
/ 22 января 2015
function waitForjQuery(){
    if(typeof jQuery!='undefined'){
        //Do yor stuff!
    }
    else{
        setTimeout(function(){
            waitForjQuery();
        },500);
    }
}
waitForjQuery();
...