Take the 2-minute tour ×

I have two iframes on a page and one makes changes to the other but the other iframe doesnt show the change until i refresh ....is there an easy way to refresh this iframe with jQuery

<div class="project">
  <iframe id="currentElement" class="myframe" name="myframe" src="http://somesite.com/something/new"></iframe>
share|improve this question
Is the iframe document on a different domain? –  Pekka 웃 Nov 22 '10 at 20:17
Do you have access to the code of the site that appears in the iFrame? –  Matt Asbury Nov 22 '10 at 20:17
Show more code -- the html for both iFrames, and also the javascript code you are using to make the changes. It's hard to figure out what the problem seeing only what you've included so far. –  Ben Lee Nov 22 '10 at 20:19
I have access to the code yes and the iframe is on a different domain –  Trace Nov 22 '10 at 20:19
@Matt, frames are not allowed to make changes to the contents of frames on other domains. For examples of how to work around this cross-domain scripting restriction see this: softwareas.com/cross-domain-communication-with-iframes –  Ben Lee Nov 22 '10 at 20:21

14 Answers 14

up vote 97 down vote accepted

If the iframe was not on a different domain, you could do something like this:


But since the iframe is on a different domain, you will be denied access to the iframe's contentDocument property by the same-origin policy.

But you can hackishly force the cross-domain iframe to reload if your code is running on the iframe's parent page, by setting it's src attribute to itself. Like this:

// hackishly force iframe to reload
var iframe = document.getElementById(FrameId);
iframe.src = iframe.src;

If you are trying to reload the iframe from another iframe, you are out of luck, that is not possible.

share|improve this answer
His question was how to accomplish this with jQuery - not Javascript. See Sime Vidas' post below for the correct jQuery answer. –  FastTrack Mar 24 '12 at 16:50
The script does not work in my IE9 (not check other version). Change contentDocument to contentWindow makes it work on IE9. document.getElementById(FrameID).contentWindow.location.reload(true); –  Han He Nov 22 '12 at 9:38
This didn't work for me, however I did something like iframe.contentDocument.location=iframe.src; instead which worked great –  glitchyme May 26 '13 at 2:08
This Jquery worked like a charm for me: $('#map_iframe').attr('src', $('#map_iframe').attr('src')); –  Topher Hunt Jul 1 at 19:00
$( '#iframe' ).attr( 'src', function ( i, val ) { return val; });
share|improve this answer
+1 for only having one reference to the ID, less likely to change one but forget the other –  Matthew Lock Aug 25 '11 at 6:53
Best solution right here. –  FastTrack Mar 24 '12 at 16:49
+1 : Nice written solution. This works fine. –  Pierre-Gilles Levallois Jul 4 '12 at 9:06
This should be the top answer ... –  Nicolae Surdu May 22 '13 at 15:24
@NicolaeSurdu Also, this: (function (elem) { elem.src = elem.src; }($('#iframe')[0])); –  Šime Vidas May 22 '13 at 17:39

you can also use jquery. This is the same what Alex proposed just using JQuery:

 $('#currentElement').attr("src", $('#currentElement').attr("src"));
share|improve this answer

Reload an iframe with jQuery

make a link inside the iframe lets say with id = "reload" then use following code

$('#reload').click(function() {

and you are good to go with all browsers.

Reload an iframe with HTML (no Java Script req.)

It have more simpler solution: which works without javaScript in (FF, Webkit)

just make an anchor inSide your iframe

   <a href="#" target="_SELF">Refresh Comments</a>

When you click this anchor it just refresh your iframe

But if you have parameter send to your iframe then do it as following.

  <a id="comnt-limit" href="?id=<?= $page_id?>" target="_SELF">Refresh Comments</a>

do not need any page url because -> target="_SELF" do it for you

share|improve this answer

Just reciprocating Alex's answer but with jQuery

var currSrc = $("#currentElement").attr("src");
$("#currentElement").attr("src", currSrc);
share|improve this answer

with jquery you can use this:


share|improve this answer
Thanx. It works for me! –  Nick_K Apr 24 '13 at 9:35

This possible with simple javascript. In iFrame1 make a javascript function that is called in the body tag onload. I have a it check a server side variable that I set, so it does not try to run the javascript function in iframe2 unless I have taken a specific action in iframe 1. You could set this up as a function fired by a button press or however you want to in iframe1. Then in iframe 2 you have the second function I list below. The function in iframe1 basically goes to the parent page and then uses the window.frames suntax to fire a javascript function in iframe2. Just make sure to use the id/name of iframe2 and not the src.

//function in iframe1
function refreshIframe2()
if (<cfoutput>#didValidation#</cfoutput> == 1)

//function in iframe2
function refreshPage()
share|improve this answer

If you are cross-domain, simply setting the src back to the same url will not always trigger a reload, even if the location hash changes.

Ran into this problem while manually constructing Twitter button iframes, which wouldn't refresh when I updated the urls.

Twitter like buttons have the form: .../tweet_button.html#&_version=2&count=none&etc=...

Since Twitter uses the document fragment for the url, changing the hash/fragment didn't reload the source, and the button targets didn't reflect my new ajax-loaded content.

You can append a query string parameter for force the reload (eg: "?_=" + Math.random() but that will waste bandwidth, especially in this example where Twitter's approach was specifically trying to enable caching.

To reload something which only changes with hash tags, you need to remove the element, or change the src, wait for the thread to exit, then assign it back. If the page is still cached, this shouldn't require a network hit, but does trigger the frame reload.

 var old = iframe.src;
 iframe.src = '';
 setTimeout( function () {
    iframe.src = old;
 }, 0);

Update: Using this approach creates unwanted history items. Instead, remove and recreate the iframe element each time, which keeps this back() button working as expected. Also nice not to have the timer.

share|improve this answer

I'm pretty sure all of the examples above only reload the iframe with its original src, not its current URL.

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

That should reload using the current url.

share|improve this answer
    ifrX =document.getElementById('id') //or 
    ifrX =frames['index'];

cross-browser solution is:

    ifrX.src = ifrX.contentWindow.location

this is useful especially when <iframe> is a the target of a <form>

share|improve this answer
why jQuery ?! when simple js available –  bortunac Mar 2 '12 at 12:59

SOLVED! I register to stockoverflow just to share to you the only solution (at least in ASP.NET/IE/FF/Chrome) that works! The idea is to replace innerHTML value of a div by its current innerHTML value.

Here is the HTML snippet:

<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>

And my Javascript code:

function refreshGranite() {           
   var iframe = document.getElementById('divGranite')
   iframe.innerHTML = iframe.innerHTML;

Hope this helps.

share|improve this answer

Just reciprocating Alex's answer but with jQuery:

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

Or you can use small function:

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

I hope it helps.

share|improve this answer

Here is another way

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

Below solution will work for sure:

window.parent.location.href = window.parent.location.href;
share|improve this answer

Your Answer


