从子窗口重新加载父窗口

71

我该如何使用jQuery重新加载我的子窗口的父窗口?

12个回答

106

好的,我刚刚修复了那个问题。感谢你的解释。 - ChaosPandion
4
它需要一个参数 - 你可以传入 true 来强制重新加载(即忽略缓存)。 - Greg
Mozilla 的参考网站提到了这一点。我想知道它是否只适用于特定的浏览器。 - ChaosPandion
即使参数是非标准的,它也会被忽略(http://www.w3.org/TR/Window/#location-methods),因此除非您想要默认行为,否则使用它不会有任何损害。 - strager
2
在Chrome中无法工作:未捕获的TypeError错误:无法读取null的'location'属性。 - user1932315

25

您可以使用 window.opener, window.parent 或者 window.top来引用目标窗口,然后只需调用 reload 方法 (例如:window.parent.location.reload())。

但需要注意的是,如果您需要从最初打开的页面导航离开页面,则可能会遇到使用 window.opener 的问题,因为参考将丢失。


+1 被标记的答案使用了 window.opener(我理解为什么那是首选方法),但我只有在 window.top 上才成功。 - Rikon
1
如果子窗口是一个iframe,你可以使用以下代码:window.parent.reload(); 或者 window.parent.location.href='abc.html'; - shasi kanth
reload()不是window的方法。你指的是window.parent.location.reload(),这个我在我的答案中已经提到了。 - Justin Johnson

16
parent.location.reload();

这应该可以工作。


将可选参数设置为true以绕过浏览器缓存。例如:parent.location.reload(true); 参考:https://www.w3schools.com/jsref/met_loc_reload.asp - Zeek2

6

如果你想简单地重新加载子窗口的父窗口: 下面的代码行就足够了。

opener.location.reload(); 

如果您想使用旧的或新的值重新加载带有查询字符串(请求)的父窗口,则以下代码将完成此工作。

if (opener.location.href.indexOf('?') > 0) {
      var baseUrl = opener.location.href.substring(0, opener.location.href.indexOf('?'));
      opener.location.href = baseUrl + "?param1=abc&param2=123";
}
else {
      opener.location.href = opener.location.href + "?param1=abc&param2=123";
}

在上面的例子中,opener.location.reload();是不必要的。


4
这对我有用:
  window.opener.location.reload()
  window.close();

在这种情况下,当前标签页将关闭并且父标签页将被刷新。

3

你可以使用以下方法重新加载父窗口位置:

window.opener.location.href = window.opener.location.href;

2
  top.frames.location.reload(false);

1
window.parent.opener.location.reload();

对我有用。


1

防止先前的数据被重新提交。在Firefox和Safari中进行了测试。

top.frames.location.href = top.frames.location.href;

1
这将适用于从子窗口刷新父窗口。
window.opener.location.reload(true);

对于某些版本的IE,这将无法正常工作,因此您可以设置一些延迟。

window.setTimeout(window.opener.location.reload(true), 3000);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接