我正在尝试使用iframe中的javascript重新加载父窗口(同一个域)。
window.parent.location.href = window.parent.location.href;
由于某些原因在这里不起作用(没有javascript错误)。
我不相信这是同源政策的问题,如下所示:
window.parent.location.reload();
此选项的问题是如果最后一个请求是POST,它将作为POST重新加载。
为什么第一个选项不起作用的任何想法?否则,是否有另一种方法可以重新加载页面而无需重新提交任何表单数据(例如,对父页面URL执行新的GET请求)?
我也尝试过:
top.frames.location.href = top.frames.location.href;
window.opener.location.href = window.opener.location.href
以及其他各种迭代。
答案 0 :(得分:1)
我试过这段代码:
window.location.href = window.location.href;
在普通页面(无框架)中也没有效果。浏览器必须检测到它与显示的URL相同,并得出结论:不需要采取任何操作。
您可以做的是添加一个虚拟GET参数并更改它以强制浏览器重新加载。第一个加载可能看起来像这样(包含POST数据,当然不在此处显示):
http://www.example.com/page.html?a=1&b=2&dummy=32843493294348
然后重新加载:
var dummy = Math.floor(Math.random() * 100000000000000);
window.parent.location.href = window.parent.location.href.replace(/dummy=[0-9]+/, "dummy=" + dummy);
答案 1 :(得分:0)
Phari的回答对我有用,只需进行一些调整以适应我的用例:
var rdm = Math.floor(Math.random() * 100000000000000);
var url = window.parent.location.href;
if (url.indexOf("rdm") > 0) {
window.parent.location.href = url.replace(/rdm=[0-9]+/, "rdm=" + rdm);
} else {
var hsh = "";
if (url.indexOf("#") > 0) {
hash = "#" + url.split('#')[1];
url = url.split('#')[0];
}
if (url.indexOf("?") > 0) {
url = url + "&rdm=" + rdm + hsh;
} else {
url = url + "?rdm=" + rdm + hsh;
}
window.parent.location.href = url;
}
我确信这可能更有效率,但效果还可以。