Перезагрузите iframe с помощью jQuery
У меня есть два iframe на странице, и один вносит изменения в другой, но другой iframe не показывает изменения, пока я не обновлю. Есть ли простой способ обновить этот iframe с помощью jQuery?
<div class="project">
<iframe id="currentElement" class="myframe" name="myframe" src="http://somesite.com/something/new"></iframe>
</div>
17 ответов:
Если iframe не был на другом домене, вы могли бы сделать что-то вроде этого:
document.getElementById(FrameID).contentDocument.location.reload(true);но поскольку iframe находится в другом домене, вам будет отказано в доступе к iframe
contentDocumentимущества политика того же происхождения.но вы можете взломать междоменный iframe для перезагрузки, если ваш код работает на родительской странице iframe, установив его атрибут src для себя. Вот так:
// hackishly force iframe to reload var iframe = document.getElementById(FrameId); iframe.src = iframe.src;Если вы пытаетесь перезагрузите iframe из другого iframe, вам не повезло,это и не возможно.
вы также можете использовать jQuery. Это то же самое, что Алекс предложил просто с помощью JQuery:
$('#currentElement').attr("src", $('#currentElement').attr("src"));
перезагрузите iframe с помощью jQuery
сделать ссылку внутри iframe позволяет сказать с id = "перезагрузить" затем использовать следующий код
$('#reload').click(function() { document.location.reload(); });и вы хорошо идти со всеми браузерами.
перезагрузите iframe с HTML (без Java Script req.)
у него есть более простое решение: которое работает без javaScript в (FF, Webkit)
просто сделайте якорь внутри вашего iframe
<a href="#" target="_SELF">Refresh Comments</a>при нажатии этот якорь он просто обновить iframe
но если у вас есть параметр отправить в iframe, то сделайте это следующим образом.
<a id="comnt-limit" href="?id=<?= $page_id?>" target="_SELF">Refresh Comments</a>не нужен url-адрес страницы, потому что - > target="_SELF" сделать это за вас
С помощью jQuery вы можете использовать это:
$('#iframeid',window.parent.document).attr('src',$('#iframeid',window.parent.document).attr('src'));
просто ответив на ответ Алекса, но с помощью jQuery
var currSrc = $("#currentElement").attr("src"); $("#currentElement").attr("src", currSrc);
Я уверен, что все примеры выше только перезагрузить iframe с его оригинальным src, а не его текущий URL.
$('#frameId').attr('src', function () { return $(this).contents().get(0).location.href });это должно перезагрузить с помощью текущего url.
если вы являетесь междоменным, просто установка src обратно на тот же url-адрес не всегда вызовет перезагрузку, даже если хэш местоположения изменится.
столкнулся с этой проблемой при ручном создании кнопки Twitter iframes, которая не обновлялась при обновлении URL-адресов.
Twitter, как кнопки имеют форму:
.../tweet_button.html#&_version=2&count=none&etc=...поскольку Twitter использует фрагмент документа для url-адреса, изменение хэша / фрагмента не перезагрузило источник, а кнопка нацелена не отражает мой новый ajax-загруженный контент.
вы можете добавить параметр строки запроса для принудительной перезагрузки (например:
"?_=" + Math.random()но это будет тратить пропускную способность, особенно в этом примере, где подход Twitter специально пытался включить кэширование.чтобы перезагрузить что-то, что меняется только с хэш-тегами, вам нужно удалить элемент или изменить
src, дождитесь выхода потока, а затем назначьте его обратно. Если страница все еще кэшируется, это не должно требовать сеть попала, но запускает перезагрузку кадра.var old = iframe.src; iframe.src = ''; setTimeout( function () { iframe.src = old; }, 0);обновление: использование этого подхода создает нежелательные элементы истории. Вместо этого каждый раз удаляйте и воссоздавайте элемент iframe, что позволяет этой кнопке back() работать должным образом. Также приятно не иметь таймер.
просто ответив на ответ Алекса, но с jQuery:
var e = $('#myFrame'); e.attr("src", e.attr("src"));или вы можете использовать небольшую функцию:
function iframeRefresh(e) { var c = $(e); c.attr("src", c.attr("src")); }Я надеюсь, что это помогает.
это возможно с помощью простого JavaScript.
- в iFrame1 создайте функцию JavaScript, которая вызывается в теге body onload. Я проверяю переменную на стороне сервера, которую я установил, поэтому он не пытается запустить функцию JavaScript в iframe2, если я не предпринял определенного действия в iframe1. Вы можете настроить это как функцию, запущенную нажатием кнопки или как вы хотите в iframe1.
- затем в iframe2, у вас есть вторая функция Я список ниже. Этот функция в iframe1 в основном переходит на родительскую страницу, а затем использует
window.framesсинтаксис для запуска функции JavaScript в iframe2. Просто убедитесь, что вы используетеid/nameiframe2 а неsrc.//function in iframe1 function refreshIframe2() { if (<cfoutput>#didValidation#</cfoutput> == 1) { parent.window.frames.iframe2.refreshPage(); } } //function in iframe2 function refreshPage() { document.location.reload(); }
ifrX =document.getElementById('id') //or ifrX =frames['index'];кроссбраузерное решение:
ifrX.src = ifrX.contentWindow.locationэто полезно, особенно когда
решена! Я регистрируюсь в stockoverflow только для того, чтобы поделиться с вами единственным решением (по крайней мере, в ASP.NET/IE/FF/Chrome) это работает! Идея состоит в том, чтобы заменить значение innerHTML div его текущим значением innerHTML.
вот фрагмент HTML:
<div class="content-2" id="divGranite"> <h2>Granite Purchase</h2> <IFRAME runat="server" id="frameGranite" src="Jobs-granite.aspx" width="820px" height="300px" frameborder="0" seamless ></IFRAME> </div>и мой код Javascript:
function refreshGranite() { var iframe = document.getElementById('divGranite') iframe.innerHTML = iframe.innerHTML; }надеюсь, что это помогает.
вы должны использовать
[0].src
найти источник iframe и его URL должен быть в том же домене родителя.
setInterval(refreshMe, 5000); function refreshMe() { $("#currentElement")[0].src = $("#currentElement")[0].src; }
/ / обновить все iframes на странице
var f_list = document.getElementsByTagName('iframe'); for (var i = 0, f; f = f_list[i]; i++) { f.src = f.src; }
Comments