Установить opener.location в Opera - PullRequest
0 голосов
/ 16 декабря 2010

У меня есть http://parent.com, который открывает всплывающее окно на http://parent.com:8888 (это в разработке, в производстве может быть даже другой домен (который я контролирую)). После окончания всплывающего окна это волшебство, которое будет содержать это:

 <!-- this is on http://parent.com:8888/popup.php -->
 <html>
     <script type="text/javascript">
         window.opener.location.href = "http://parent.com/ow_yeah.php";
         self.close(); 
     </script>
 </html>

Работает во всех браузерах, кроме IE8 и Opera. В IE8 мне еще предстоит исследовать, но Opera - это то, что меня беспокоит. Ошибка, которую он выбрасывает, такова:

Uncaught exception: ReferenceError: Security error: attempted to write protected variable

Попробовал , это , но это не сработало. Я также читал в Интернете, что это междоменная проблема: дочернее окно никогда не должно изменять что-либо в родительском окне другого домена, за исключением местоположения родительского. Я пытаюсь изменить местоположение, но у меня все еще есть проблемы. Есть идеи?

Ответы [ 2 ]

1 голос
/ 16 декабря 2010

Здесь действует та же политика происхождения. Если вы посмотрите на диаграмму , вы увидите, что разные порты рассматриваются как разные домены.

0 голосов
/ 22 декабря 2010

Действительно, это потому, что другой порт считается другим источником.Я удивлен, что вы видите сбой только в некоторых браузерах, но я думаю, что их политики безопасности могут быть немного другими.Устанавливаете ли вы document.domain где-нибудь, кстати?

Если вам по какой-то причине действительно нужна эта настройка с всплывающими окнами и родителями из разных источников, вам, возможно, придется использовать window.postMessage () для связи между ними,См. http://ejohn.org/blog/cross-window-messaging/ (немного устаревший в своих примерах, но довольно хорошее объяснение принципов) и http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#web-messaging - текущую спецификацию с копируемым примером кода.

...