Я искал какое-то время и не могу найти ответ, который соответствует моим потребностям. У меня есть страница, которая открывает окно (window.open), регистрирует пользователя (создает cookie, устанавливает сеанс), затем перенаправляется на другую страницу. Пока модальное перенаправление, я хотел бы обновить родительскую страницу, поэтому все хорошие вещи, которые я только что сделал, будут распознаны родителем. Я пробовал window.opener и тому подобное. Может ли кто-нибудь помочь мне немного? СпасибоОбновить родительское окно из дочернего окна в javascript
ответ
window.opener
во всплывающем окне будет ссылаться на объект открытия окна, поэтому, конечно, вы должны иметь возможность позвонить по номеру window.opener.location.reload();
. Если вы не запускаете Same Origin Policy, всплывающее окно может вызывать скрипты и манипулировать свойствами в родительском объекте окна точно так же, как в родительском коде.
Здесь live example, демонстрирующий дочерний элемент, возвращающий функцию родительскому элементу, а также непосредственно манипулирование родителем. Полный код для этого приведен ниже.
Но этот пример не делать точно, что вы сказали, так что я имею done this one as well, которая имеет ребенка освежающий родительскую страницу с помощью window.opener.location.reload()
.
Родитель код первого живого примера:
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>Parent Window</title>
<!--[if IE]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<style>
article, aside, figure, footer, header, hgroup,
menu, nav, section { display: block; }
</style>
</head>
<body>
<input type='button' id='btnOpen' value='Open Window'>
<div id='display'></div>
</body>
<script type='text/javascript'>
(function() {
var btnOpen = document.getElementById('btnOpen');
btnOpen.onclick = btnOpenClick;
function btnOpenClick() {
window.open('http://jsbin.com/ehupo4/2');
}
// Make the callback function available on our
// `window` object. I'm doing this explicitly
// here because I prefer to export any globals
// I'm going to create explicitly, but if you
// just declare a function in a script block
// and *not* inside another function, that will
// automatically become a property of `window`
window.callback = childCallback;
function childCallback() {
document.getElementById('display').innerHTML =
'Got callback from child window at ' + new Date();
}
})();
</script>
</html>
(Вы не имеют использовать функцию рамочный, как я сделал выше, но это полезно, чтобы сохранить ваши глобалам содержали.)
Код ребенка с первым живым примером:
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>Child Window</title>
<!--[if IE]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<style>
article, aside, figure, footer, header, hgroup,
menu, nav, section { display: block; }
</style>
</head>
<body>
<p>I'm the child window</p>
</body>
<script type='text/javascript'>
if (window.opener) {
// Call the provided callback
window.opener.callback();
// Do something directly
var p = window.opener.document.createElement('p');
p.innerHTML = "I was added by the child directly.";
window.opener.document.body.appendChild(p);
}
</script>
</html>
window.parent.top.location = window.parent.top.location; (или что-то похожее на это)
window.opener, возможно, лучше – automagic
Если ни одно из других предложений не работает (не забудьте протестировать во всех основных браузерах), вы также можете попробовать передать ссылку родительского окна в дочернее окно явно. Поскольку window.open()
должен возвращать ссылку на окно ребенка .. так что вы можете сделать child = window.open()
, а затем вы можете сделать что-то вроде child.myParent = window
Очень верно. 'window.opener' является надежным, запрещающим SOP, и это тоже будет работать в SOP, но полезно иметь опции. Вы должны иметь дело с временными настройками, что является частью того, почему я предпочитаю, чтобы ребенок вызывал родителя. –
Я была такая же проблема с отправкой формы в модальном через AJAX и нужна странице, под (родитель страница) для перезагрузки. window.location.reload();
работал для меня.
Возможно, вы имели в виду «Обновить родителя из javascript CHILD»? Мне нравится зеленый чили, из Нью-Мексико, но я не знаю, что такое чили в этом контексте. –
window.parent не так ли? 'window.parent.frames [0]' или аналогичный https://developer.mozilla.org/en/DOM –
window.opener, как правило, вы вызываете дочернее окно. Можете ли вы показать свой скрипт, который вы используете, чтобы открыть это новое окно? –