Некоторое время назад обнаружил интересный баг в IE, успешно доживший и до восьмой версии. Суть бага заключается в том, что при уходе со страницы содержащей несколько iframe-ов и последующем возврате при помощи кнопки back, содержимое этих самый фреймов может перемешаться.
UPD: Говорят FF и Opera на этом коде тоже косячат, но по-другому :)
Причиной этому является манипулирование деревом документа при помощи скриптов. А точнее перенос iframe объекта в другое место документа, с изменением линейного порядка фреймов.
После некоторых исследований, обнаруживается такая схема:
Как обычно, один пример лучше тысячи объяснений. На следующей страничке надо прсто нажать «Test link» и потом вернуться назад.
К слову, похоже баг вопроизводится только в IE и (что интересно) изначально обнаружен был на одном из сайтов микрософта :)
UPD: Говорят FF и Opera на этом коде тоже косячат, но по-другому :)
Причиной этому является манипулирование деревом документа при помощи скриптов. А точнее перенос iframe объекта в другое место документа, с изменением линейного порядка фреймов.
После некоторых исследований, обнаруживается такая схема:
- уходя со страницы, IE запоминает ссылки во фреймах обходя текущее (измененное) дерево документа
- возвращаясь на страницу, исходное дерево обходится на предмет поиска фреймов и в них загружаются сохраненные на прошлом шаге адреса. поскольку порядок фреймов отличается, получается каша
- срабатывает скрипт, фреймы стают на свои места, но содержимое в них уже перемешано
Как обычно, один пример лучше тысячи объяснений. На следующей страничке надо прсто нажать «Test link» и потом вернуться назад.
Copy Source | Copy HTML
- <html><body>
- <div id="container">
- <iframe src="http://google.com/" id="frame1"></iframe>
- <iframe src="http://microsoft.com/"></iframe>
- <iframe src="http://habrahabr.ru/"></iframe>
- </div>
- <div><a href="http://google.com/">Test link</a></div>
-
- <script type="text/javascript">
- document.getElementById("container").appendChild(document.getElementById("frame1"));
- </script>
- </body></html>
К слову, похоже баг вопроизводится только в IE и (что интересно) изначально обнаружен был на одном из сайтов микрософта :)