Взаимодействие фреймов. 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.
Пробывал в настрйоках безопасноти броузера разрешать передачу данных между разными доменами - тоже проблему не лечит, что и хорошо, т.к. решения явно неправильное.
|