Javascript-форум (https://javascript.ru/forum/)
-   Internet Explorer (https://javascript.ru/forum/css-html-internet-explorer/)
-   -   Взаимодействие фреймов. IE7 (https://javascript.ru/forum/css-html-internet-explorer/15520-vzaimodejjstvie-frejjmov-ie7.html)

Svarog81 02.03.2011 17:25

Взаимодействие фреймов. IE7
 
Добрый день!

Столкнулся тут с одной проблемой. Никак не могу понять, в чём дело. Буду признателен за помощь или любой дельный совет.

Есть некий документ (страница), в которой есть два iframe. Один iframe грузит кнопку (она меняется в зависимости от куки), а другой - некий документ, который следует показываать при нажатии на кнопку в первом iframe. В каждом из трёх документов свойство document.domain выставлено следующим образом:

document.domain = document.location.host;

Т.е. значение этого свойства ВСЕГДА совпадает с хостом, набранным в адресной строке.

Как всё это работает.

Человек нажимает на кнопку, чтобы открыть желаемое окошко. В фрейме с кнопкой срабатывает JS-код, который обращается к свойству parent.window и вызывает метод родительского окна для отображения скрытого второго фрейма.

В принципе ничего сложного. И всё вроде бы работает во всех обозревателях...

Но есть такой замечательный броузер как Internet Explorer 7.0, где возникает одна проблема, которую я никак не получается преодолеть. Пробема заключается вот в чём.

Открыл поьзователь страницу в этом IE7, походил по ссылкам, потом нажал несколько раз кнопку Back, вернулся на какую-то страницу и тут-то он решил нажать на нашу кнопку.. Нажимает и.. "Тишина" (просто все в try and catch).
На деле происходит следующее: при нажатии на кнопку iframe пытается обратиться к свойству parent.window, чтобы отобразить второй фрейм, и в этот момент IE7 кидает exception: "отказано в доступе" ("access denied"). Точно такой же эффект можно получить и без кнопки Back. Для этого можно много-много раз нажать на странице F5, после чего ткнуть в кнопку. После этого данная проблема лечится перезапуском броузера или очисткой собственного кеша броузера.

Во время возникновения ошибки document.domain во всех фреймах и родительском окне совпадает (проверял при помощи alert).
Думал, что проблема как-то связана с собственным кешем броузера (уж больно подозрительно было то, что требовалась очистка кеша, да и пару раз ловил, что при таких обновлениях или при использовании Back IE7 рисует давно канувший в лето HTML код).
Поэтому была предпринята попытка заставить его не кешировать страницу при помощи явного указания метатегов и соответсвующих HTTP заголовков ответа от сервера. Но данное действие не дало никаких положительных результатов.

Сейчас одна из догадок о причинах проблемы - это то, что броузер упорно (не смотря на все рекомендации метатегов и заголовков) берёт страницу из кеша, и работает с ней, но уже не в контексте домена, а в контексте localhost (т.е. реальный document.domain отличается от того. что сидит в JS переменной). Но это только догадка. По-крайней мере это объясняет ошибку "отказано в доступе".

В IE6, IE8, Firefox, Google Chrome, Safari, Opera подобных проблем нет. Один только убогий IE7 так терзает меня..

Вобщем может кто сталкивался с этим уже. Буду рад любой помощи. Заранее спаисбо за ответ.

P.S.
Пробывал в настрйоках безопасноти броузера разрешать передачу данных между разными доменами - тоже проблему не лечит, что и хорошо, т.к. решения явно неправильное.

Svarog81 03.03.2011 13:08

Проблема похоже решается просто удалением строк с инициализацией document.domain - оставил заполенение этой переменной на совесть броузеров. Пока все тесты показывают, что проблема "ушла".


Часовой пояс GMT +3, время: 08:56.