Закрыть дочернее окно, перенаправить родительское окно

#javascript #redirect #window

#javascript #перенаправление #окно

Вопрос:

У меня есть страница, которая открывает дочернее окно от родительского.

После того, как пользователь что-то сделал в дочернем окне, мне нужно, чтобы дочернее окно закрылось, а его родительское окно было перенаправлено на страницу нажатием кнопки в дочернем окне.

Есть идеи?

Ответ №1:

из дочернего:

 opener.location.href = '/redirect';
close();
  

Комментарии:

1. но IE показывает заблокированное всплывающее окно: (Любое решение, работающее и в IE?

2. @Binod — IE, блокирующий всплывающее окно, не имеет никакого отношения к этому вопросу. Пожалуйста, задайте новый вопрос, если у вас возникли проблемы, этому почти 3 года.

3. Проблема заключалась в той же политике происхождения. Если окна разного происхождения, то IE рассматривает это перенаправление как всплывающее окно

Ответ №2:

Ключ в том, чтобы использовать window.opener для доступа к родительскому окну:

 <script>
    window.opener.location = '/redirect.html';
    window.close();
</script>
  

Комментарии:

1. вы хотите перевернуть эти строки, подумайте об этом 🙂

2. @cwolves: Это работает в любом случае. Вы все еще можете получить доступ к свойствам объекта window даже после его закрытия.

3. Это не гарантируется. Конечно, это, вероятно, всегда будет работать в этом сценарии, но браузер начнет закрывать окно и в конечном итоге остановит выполнение JS в середине инструкции. Если у вас был долго выполняющийся код после window.close() , есть вероятность, что он не завершится. Также есть вероятность, что какой-нибудь браузер сообщит «после этого код не разрешен для запуска window.close() » и просто немедленно отключит его

4. @cwolves — Хороший момент, что мы не знаем, что может сделать браузер, поэтому безопаснее просто делать это в логическом порядке. Я перевернул две строки в своем ответе.

5. Единственная причина, по которой я действительно указываю на это, заключается в том, что я столкнулся со сценарием, в котором я запустил много логики window.onbeforeunload , и браузер убил его : (

Ответ №3:

попробуйте это:

 var parent = window.opener;

parent.location ='some url';

window.close();
  

вот пример в скрипке: http://jsfiddle.net/maniator/jGbZq /

Ответ №4:

Пожалуйста, попробуйте ниже :

 window.opener.location.reload();
close();
  
  1. window.opener.location.reload(); перезагрузит родительское окно.
  2. close() закроет дочернее окно

У меня все работает нормально.