Перезагрузите iframe с помощью jQuery

У меня есть два iframes на странице, и один делает изменения в другом, но другой iframe не показывает изменения до тех пор, пока я не обновляюсь. Есть ли простой способ обновить этот iframe с помощью jQuery?

<div class="project">
  <iframe id="currentElement" class="myframe" name="myframe" src="http://somesite.com/something/new"></iframe>
</div>

Ответ 1

Если 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, вам не повезло, это невозможно.

Ответ 2

$( '#iframe' ).attr( 'src', function ( i, val ) { return val; });

Ответ 3

вы также можете использовать jquery. Это то же самое, что Алекс предложил использовать JQuery:

 $('#currentElement').attr("src", $('#currentElement').attr("src"));

Ответ 4

Перезагрузить iframe с помощью jQuery

сделать ссылку внутри iframe, скажем с id = "reload", а затем использовать следующий код

$('#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" сделайте это за вас

Ответ 5

с помощью jquery вы можете использовать это:

$('#iframeid',window.parent.document).attr('src',$('#iframeid',window.parent.document).attr('src'));

Ответ 6

Просто ответный ответ Alex, но с jQuery

var currSrc = $("#currentElement").attr("src");
$("#currentElement").attr("src", currSrc);

Ответ 7

Если вы являетесь кросс-доменом, просто установка src обратно на тот же URL-адрес не всегда вызывает перезагрузку, даже если изменяется хэш местоположения.

В этой проблеме возникла проблема при ручном построении iframes кнопок Twitter, которые не обновлялись при обновлении 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, который удерживает эту кнопку назад(), как ожидается. Также приятно не иметь таймер.

Ответ 8

Я уверен, что все приведенные выше примеры только перезагружают iframe исходным src, а не его текущим URL.

$('#frameId').attr('src', function () { return $(this).contents().get(0).location.href });

Это должно перезагрузить, используя текущий URL.

Ответ 9

Просто ответный ответ Alex, но с jQuery:

var e = $('#myFrame');
    e.attr("src", e.attr("src"));

Или вы можете использовать небольшую функцию:

function iframeRefresh(e) {
    var c = $(e);
        c.attr("src", c.attr("src"));
}

Надеюсь, это поможет.

Ответ 10

Вот еще один способ

$( '#iframe' ).attr( 'src', function () { return $( this )[0].src; } );

Ответ 11

Это возможно с помощью простого JavaScript.

  • В iFrame1 создайте функцию JavaScript, которая вызывается в теге body onload. Я проверяю переменную на стороне сервера, которую я установил, поэтому он не пытается запустить функцию JavaScript в iframe2, если я не принял конкретное действие в iframe1. Вы можете установить это как функцию, нажатую нажатием кнопки или, если хотите, в iframe1.
  • Затем в iframe2 у вас есть вторая функция, которую я перечисляю ниже. Функция iframe1 в основном переходит на родительскую страницу, а затем использует синтаксис window.frames для запуска функции JavaScript в iframe2. Просто убедитесь, что используйте id/name iframe2, а не src.
//function in iframe1
function refreshIframe2()
{
    if (<cfoutput>#didValidation#</cfoutput> == 1)
    {   
         parent.window.frames.iframe2.refreshPage();
    }
}

//function in iframe2
function refreshPage()
{   
    document.location.reload();
}

Ответ 12

$('IFRAME#currentElement').get(0).contentDocument.location.reload()

Ответ 13

    ifrX =document.getElementById('id') //or 
    ifrX =frames['index'];

кросс-браузерное решение:

    ifrX.src = ifrX.contentWindow.location

это особенно полезно, когда <iframe> является мишенью формы <form>

Ответ 14

РЕШИТЬ! Я зарегистрируюсь на биржевом потоке, чтобы предоставить вам единственное решение (по крайней мере, в 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;
}

Надеюсь, что это поможет.

Ответ 15

Вам нужно использовать

[0].src

чтобы найти источник iframe, и его URL-адрес должен находиться в одном домене родителя.

setInterval(refreshMe, 5000);
function refreshMe() {
    $("#currentElement")[0].src = $("#currentElement")[0].src;   
}

Ответ 16

//обновить все iframes на странице

var f_list = document.getElementsByTagName('iframe');

 for (var i = 0, f; f = f_list[i]; i++) {
                            f.src = f.src;
                        }

Ответ 17

Ниже приведено решение:

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