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



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



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

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

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

вы также можете использовать 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.

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

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

если вы являетесь междоменным, просто установка 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"));
}

Я надеюсь, что это помогает.

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

это возможно с помощью простого 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();
}
    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;
                        }

ниже решение будет работать точно:

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

Comments

    Ничего не найдено.