Оригинальный баг с iframe и DOM в IE

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

    UPD: Говорят FF и Opera на этом коде тоже косячат, но по-другому :)

    Причиной этому является манипулирование деревом документа при помощи скриптов. А точнее перенос iframe объекта в другое место документа, с изменением линейного порядка фреймов.

    После некоторых исследований, обнаруживается такая схема:
    1. уходя со страницы, IE запоминает ссылки во фреймах обходя текущее (измененное) дерево документа
    2. возвращаясь на страницу, исходное дерево обходится на предмет поиска фреймов и в них загружаются сохраненные на прошлом шаге адреса. поскольку порядок фреймов отличается, получается каша
    3. срабатывает скрипт, фреймы стают на свои места, но содержимое в них уже перемешано

    Как обычно, один пример лучше тысячи объяснений. На следующей страничке надо прсто нажать «Test link» и потом вернуться назад.
    Copy Source | Copy HTML
    1. <html><body>
    2.     <div id="container">
    3.         <iframe src="http://google.com/" id="frame1"></iframe>
    4.         <iframe src="http://microsoft.com/"></iframe>
    5.         <iframe src="http://habrahabr.ru/"></iframe>
    6.     </div>
    7.     <div><a href="http://google.com/">Test link</a></div>
    8.  
    9.     <script type="text/javascript">
    10.         document.getElementById("container").appendChild(document.getElementById("frame1"));
    11.     </script>
    12. </body></html>


    К слову, похоже баг вопроизводится только в IE и (что интересно) изначально обнаружен был на одном из сайтов микрософта :)

    Похожие публикации

    Средняя зарплата в IT

    111 111 ₽/мес.
    Средняя зарплата по всем IT-специализациям на основании 6 844 анкет, за 2-ое пол. 2020 года Узнать свою зарплату
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 10

      +12
      Не менее интересно то, что
      — Safari 4.0 и Chrome 2.0 iframe c Google ставят последним
      — Firefox 3.0.10 выдает два iframe с Google, убивая куда-то iframe с хабром
      — Opera 10b при возврате выдает два хабра.
        +2
        Пардон, с учетом скрипта webkit перемещает элементы правильно :)
        –1
        А вдруг это фича! :)
        +2
        Много лет меня бесил кочующий по версиям баг в IE: если сначала сайт не загрузился по какой-либо причине, то заголовок окна становилса «Страница не найдена». И если даже потом обновить ее, и сайт загрузится, то заголовок так и оставался «Страница не найдена». Скажите, пожалуйста, сейчас так же осталось в 7 и 8 версиях?
          +1
          Вы не поверите, но этот же баг вызывается достаточно часто в проводнике Microsoft Windows XP (за остальные ответственности не несу). Имеется в виду ситуация, когда в заголовке выдается различного рода служебная информация, допустим, оповещение об отсутствии ответа от окна.

          ЗЫ. Имеются в виду только(!) окна процесса explorer.exe
          0
          Разработчики поленились где-нибудь в пятерке, с учетом на то что фреймы скоро уйдут в прошлое, а вы им еще и баг репорт сейчас напишете.пожалейте людей, выходные все таки)
            –5
            IE6 — разработчики поленились
            IE7 — разработчики поленились, но почесали затылок и пофиксили там где поленились в предыдущей версии
            IE8 — разработчики не поленились и обновили предыдущую версию, но не решили проблему с первой
            +1
            … вот ещё и поэтому фреймы — зло.

            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

            Самое читаемое