[Javascript] Каков наилучший способ перезагрузить / обновить iframe?



Answers

document.getElementById('iframeid').src = document.getElementById('iframeid').src

Он перезагрузит iframe , даже через домены! Протестировано с помощью IE7 / 8, Firefox и Chrome.

Question

Я хотел бы перезагрузить <iframe> с помощью JavaScript. Лучший способ, который я нашел до сих пор, - установить атрибут src iframe для себя, но это не очень чисто. Есть идеи?




window.frames['frameNameOrIndex'].location.reload();



В IE8 с использованием .Net установка iframe.src в первый раз в порядке, но установка iframe.src во второй раз не повышает page_load страницы iframed. Чтобы решить эту проблему, я использовал iframe.contentDocument.location.href = "NewUrl.htm" .

Откройте его при использовании jQuery thickBox и попытайтесь повторно открыть ту же страницу в толстом iframe. Затем он просто показал более раннюю страницу, которая была открыта.




для нового URL-адреса

location.assign("http:google.com");

Метод assign () загружает новый документ.

перезагружать

location.reload();

Метод reload () используется для перезагрузки текущего документа.




Вы считали, что добавить к URL-адресу бессмысленный параметр строки запроса?

<iframe src="myBaseURL.com/something/" />

<script>
var i = document.getElementsById("iframe")[0],
    src = i.src,
    number = 1;

//For an update
i.src = src + "?ignoreMe=" + number;
number++;
</script>

Это не будет видно, и если вы знаете о безопасном параметре, то это должно быть хорошо.




<script type="text/javascript">
  top.frames['DetailFrame'].location = top.frames['DetailFrame'].location;
</script> 



Уточнение должности яджры ... Мне нравится эта мысль, но ненавижу идею обнаружения браузера.

Я скорее беру взгляд ppk на использование обнаружения объекта вместо обнаружения браузера ( http://www.quirksmode.org/js/support.html ), потому что тогда вы фактически проверяете возможности браузера и действуете соответственно, а не как вы думаете, на что способен браузер. Также не требует столь уродливого разбора синтаксического кода обозревателя, и не исключает отличных браузеров, о которых вы ничего не знаете.

Итак, вместо того, чтобы смотреть на navigator.AppName, почему бы не сделать что-то подобное, на самом деле тестирование для элементов, которые вы используете? (Вы можете использовать try {} блоки, если хотите стать еще более привлекательными, но это сработало для меня.)

function reload_message_frame() {
    var frame_id = 'live_message_frame';
    if(window.document.getElementById(frame_id).location ) {  
        window.document.getElementById(frame_id).location.reload(true);
    } else if (window.document.getElementById(frame_id).contentWindow.location ) {
        window.document.getElementById(frame_id).contentWindow.location.reload(true);
    } else if (window.document.getElementById(frame_id).src){
        window.document.getElementById(frame_id).src = window.document.getElementById(frame_id).src;
    } else {
        // fail condition, respond as appropriate, or do nothing
        alert("Sorry, unable to reload that frame!");
    }
}

Таким образом, вы можете попробовать как можно больше различных перестановок, как вам нравится или необходимо, без ошибок javascript и делать что-то разумное, если все остальное терпит неудачу. Это немного больше, чтобы проверить свои объекты перед их использованием, но IMO делает для улучшения и более безотказной код.

Работала для меня в IE8, Firefox (15.0.1), Chrome (21.0.1180.89 м) и Opera (12.0.2) в Windows.

Возможно, я мог бы сделать еще лучше, фактически тестируя функцию перезагрузки, но этого достаточно для меня прямо сейчас. :)




Я только что столкнулся с этим в хроме, и единственное, что работало, это удаление и замена iframe. Пример:

$(".iframe_wrapper").find("iframe").remove();
var iframe = $('<iframe src="' + src + '" frameborder="0"></iframe>');
$.find(".iframe_wrapper").append(iframe);

Довольно простой, не охваченный другими ответами.




Использование self.location.reload() перезагрузит iframe.

<iframe src="https://vivekkumar11432.wordpress.com/" width="300" height="300"></iframe>
<br><br>
<input type='button' value="Reload"  onclick="self.location.reload();" />




Для целей отладки можно было бы открыть консоль, изменив контекст выполнения на фрейм, который он хочет обновить, и выполните document.location.reload()




Links