2012-03-06 3 views
1

На одной из моих страниц у меня есть iframe, который загружается из другого поддомена, чем из главной страницы. В обоих документах я поставил document.domain быть такой же, то я пытаюсь вызвать метод из фрейма на родительской странице, что-то вроде:Методы вызова в родительском окне из iframe не выполняются в Opera

window.parent.page.doit() 

Это хорошо работает в большинстве браузеров (IE , Firefox, Chrome, Safari), но не в опере со следующим сообщением об ошибке:

Uncaught exception: ReferenceError: Security error: attempted to read protected variable: page

из того, что мне удалось найти на этом, похоже, Opera имеет туже безопасность, чем остальные браузеры. Кто-нибудь столкнулся с этой проблемой? Любые идеи, как это исправить или какие-либо обходные пути?

Спасибо.

ответ

0

вы должны установить document.domain на домен второго уровня на обеих страницах, то есть

maindomain.com

document.domain = "maindomain.com"; 

subdomain.maindomain.com

document.domain = "maindomain.com"; 
+0

Я написал это * В обоих документах я установил document.domain одинаково *, иначе он не работал бы в других браузерах также. –

+0

Я создаю тестовую страницу здесь: http://testplayground.com/xdm/, отлично работает в Opera 11.61 (mac os). это работает в вашей опере? – Goshka

+0

Да, это работает в моей опере, я не уверен, почему у меня возникли проблемы, которые я описал, я изменил код, чтобы исправить еще одну проблему, и ошибка просто исчезла. Я не уверен, что вызвало это, так как я явно изменил домены обоих документов. Спасибо, что пытались помочь. –

0

Я видел некоторые версии Opera (около 11.60, я думаю?) Кеширует информацию о безопасности страницы o r что-то вроде этого, вызывая ошибки безопасности, которые исчезли только после очистки кеша и перезапуска. Это отстой для отладки, но по крайней мере у ваших посетителей обычно не будет этой проблемы.

+0

Проблема как-то исчезла, я понятия не имею, как, но могу точно сказать, что очистка кеша (история, файлы cookie, что не так) не повлияла на эту проблему, даже не перезапустив (как браузер, так и машину). –

+0

Ничего себе. Единственное, что я могу придумать, - это проблемы времени. Линия document.domain = ... должна быть как можно раньше на странице и не находиться внутри onload или других обработчиков событий. – hallvors

+0

Нет, я проверил, чтобы убедиться, что это не так, я использовал _alert_ (так как это блоки), чтобы я знал, что произойдет, когда. назначения _document.domain_ произошли до того, как между кадрами была какая-либо связь. –