2015-03-27 6 views
1

Я пытаюсь перезагрузить родительское окно (тот же домен) с помощью javascript из iframe.Обновить родительское окно без POST

window.parent.location.href = window.parent.location.href; 

не работает здесь по какой-либо причине (без ошибок javascript).

Я не считаю, что это проблема с той же политики происхождения, как следующие работы:

window.parent.location.reload(); 

Проблема с этим параметром, если последний запрос был POST, он получает перезагружается, как POST.

Любые идеи, почему первый вариант не будет работать? В противном случае существует ли другой метод, который перезагрузит страницу без повторной отправки любых данных формы (например, выполнить новый запрос GET на URL родительской страницы)?

Я также попытался:

top.frames.location.href = top.frames.location.href; 
window.opener.location.href = window.opener.location.href 

и различные другие итераций.

+0

Что именно вы подразумеваете под «перезагрузкой страницы без повторной отправки данных любой формы»? Вы хотите, чтобы сервер повторно сгенерировал страницу, но без входов, которые она обычно использует для этого? Или вы хотите, чтобы страница была перезагружена из кеша браузера? – radiaph

+0

Если вы используете location.reload(), а последний запрос был POST, POST повторяется. Я хочу выполнить новый запрос GET на тот же URL. –

+0

Есть ли какие-либо параметры, которые вы хотите передать в запрос GET? – radiaph

ответ

1

Я попробовал этот код:

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

в обычных страницах (без рамок), и это не имело никакого эффекта либо. Браузер должен обнаружить, что он отображается на одном и том же URL-адресе, и заключить, что никаких действий не требуется.

Что вы можете сделать, это добавить параметр Dummy 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); 
+0

Это сработало очень хорошо, спасибо! Я поражен, чтобы не найти эту проблему, описанную в другом месте. –

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; 

} 

Я уверен, что это может быть более эффективным, но работает нормально.

Смежные вопросы