Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 不使用POST重新加载父窗口_Javascript_Iframe - Fatal编程技术网

Javascript 不使用POST重新加载父窗口

Javascript 不使用POST重新加载父窗口,javascript,iframe,Javascript,Iframe,我试图从iframe中用javascript重新加载父窗口(同一个域) window.parent.location.href = window.parent.location.href; 由于某种原因(没有javascript错误)在这里不起作用 我不认为这是同一原产地政策的一个问题,因为以下方法有效: window.parent.location.reload(); 这个选项的问题是,如果最后一个请求是POST,它将作为POST重新加载 你知道为什么第一个选项不起作用吗?否则,是否有其他

我试图从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
以及其他各种迭代。

我尝试了以下代码:

window.location.href = window.location.href;
在一个普通的页面(没有框架),它也没有任何效果。浏览器必须检测到显示的是同一个URL,并得出无需采取任何操作的结论

您可以做的是添加一个伪GET参数并更改它以强制浏览器重新加载。第一次加载可能如下所示(包括POST数据,当然这里没有显示):

然后重新加载:

var dummy = Math.floor(Math.random() * 100000000000000);
window.parent.location.href = window.parent.location.href.replace(/dummy=[0-9]+/, "dummy=" + dummy);

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;

}

我相信这可能会更有效,但效果不错。

您所说的“在不重新提交任何表单数据的情况下重新加载页面”到底是什么意思?您希望服务器重新生成页面,但不使用它通常用于重新生成页面的输入?或者希望从浏览器的缓存中重新加载页面?如果使用location.reload(),并且最后一个请求是POST,则POST将重复。我想对同一url执行一个新的GET请求。是否有任何参数要传递给GET请求?只有原始url上的现有参数。这非常有效,谢谢!我很惊讶没有在其他地方发现这个问题。非常感谢,我和OP有同样的问题,它工作得非常完美。
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;

}