在iframe内部重新加载父窗口

20

我在一个 iframe 中拥有我的登录页面,希望在不刷新的情况下使用 ajax 和 jquery 从 iframe 内部重新加载父窗口,但是我遇到了以下错误

(this[0].ownerDocument || this[0]).createDocumentFragment is not a function
请帮忙!


var u = document.referrer; top.window.location.href = u; 变量u等于文档的引用; 顶层窗口的位置链接等于u; - Chhatrapati Sharma
6个回答

49

我可以通过使用JavaScript重新加载页面来实现这一点。

parent.location.reload();

然后我触发了一个触发器来打开目标 iframe。

$("#log-inout").trigger("click");

我需要这样的系统来处理一个特殊的情况。这可能会帮助其他处于类似情况下的人。


11
只有当你从同一个位置加载两个窗口时,这才有效。否则,浏览器会拒绝重新加载,因为这违反了 "Same Origin Policy"。Bert-Jan 给出的 parent.location.href 答案也是同理。 - Pavel

28
parent.location.href=parent.location.href

比起其他方法,提供更加平滑的结果。

parent.location.reload()

后者会强制完全重新加载,而前者似乎更新更有效,几乎像 AJAX。


9
如果父域与 iframe 域不同,您将无法通过此方式完成操作。"协议、域名和端口必须匹配。" - Tim Yao
parent.location.href=parent.location.href 对我没有作用。父窗口没有做任何事情。 - Tarilonte

5

您可以使用:

window.parent.location.href = "Create?Param=value";

或者:

window.parent.location.href = "http://www.stackoverflow.com";

3
不必麻烦!如果你正在使用ajax,为什么还要使用iframes呢?
只需使用以下代码加载登录内容: $("在这里放置内容的位置").load("iframe的源地址");
//load via ajax
$("div").load("login.php");

更简单,更优雅。


我实际上想在用户登录时刷新内容(parentwindow),而iframe(login)仍然存在。 - Dipesh KC
有趣的想法,值得注意! - Andrew

1
如果您的iFrame和主窗口完全相同的域名和端口,那么您可以使用。
window.top.location.reload()

0
如果尝试了所有建议,但遇到了“同源策略”错误的违规行为。您可以尝试使用以下解决方案:
window.parent.location = "URL_OF_PARENT_TO_BE_REFRESHED";

这是一种相当蛮力的方法,但如果你们真的需要一个解决方案,我可以提供这个。


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