Взаимодействие фреймов. 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. Пробывал в настрйоках безопасноти броузера разрешать передачу данных между разными доменами - тоже проблему не лечит, что и хорошо, т.к. решения явно неправильное. |
Проблема похоже решается просто удалением строк с инициализацией document.domain - оставил заполенение этой переменной на совесть броузеров. Пока все тесты показывают, что проблема "ушла".
|
Часовой пояс GMT +3, время: 12:05. |