没有POST重新加载父窗口

时间:2015-03-27 14:53:14

标签: javascript iframe

我正在尝试使用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

以及其他各种迭代。

2 个答案:

答案 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;

}

我确信这可能更有效率,但效果还可以。