我已经找了一段时间,找不到符合我需要的答案。我有一个页面弹出一个窗口(window.open),记录用户(创建一个cookie,设置会话)然后重定向到另一个页面。虽然modal是重定向的,但我想刷新父页面,所以我刚才所做的所有好东西都会被父级识别。我试过window.opener和类似的东西。有人可以帮我一点吗?感谢
答案 0 :(得分:10)
window.opener
将引用打开窗口的window
对象,因此您当然可以调用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>
答案 1 :(得分:1)
window.parent.top.location = window.parent.top.location; (或类似的东西会这样做)
答案 2 :(得分:1)
如果其他建议都不起作用(请记住在所有主流浏览器中测试),您也可以尝试将父窗口的引用显式传递给子窗口。因为window.open()
应该返回对子窗口的引用..所以你可以child = window.open()
然后你可以做child.myParent = window
答案 3 :(得分:0)
我在通过ajax在模态中提交表单时遇到了同样的问题,需要重新加载下面的页面(父页面)。 window.location.reload();
为我工作。