I have two iframes on a page and one makes changes to the other but the other iframe doesn't 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>
</div>
$( '#iframe' ).attr( 'src', function ( i, val ) { return val; });
If the iframe was not on a different domain, you could do something like this:
document.getElementById(FrameID).contentDocument.location.reload(true);
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.
you can also use jquery. This is the same what Alex proposed just using JQuery:
$('#currentElement').attr("src", $('#currentElement').attr("src"));
Reload an iframe with jQuery
make a link inside the iframe lets say with id = "reload" then use following code
$('#reload').click(function() {
document.location.reload();
});
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
使用jquery你可以使用这个:
$('#iframeid',window.parent.document).attr('src',$('#iframeid',window.parent.document).attr('src'));
Just reciprocating Alex's answer but with jQuery
var currSrc = $("#currentElement").attr("src");
$("#currentElement").attr("src", currSrc);
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.
这是另一种方式
$( '#iframe' ).attr( 'src', function () { return $( this )[0].src; } );
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.
$('IFRAME#currentElement').get(0).contentDocument.location.reload()
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.
//refresh all iframes on page
var f_list = document.getElementsByTagName('iframe');
for (var i = 0, f; f = f_list[i]; i++) {
f.src = f.src;
}
This is possible with simple JavaScript.
window.frames
syntax 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)
{
parent.window.frames.iframe2.refreshPage();
}
}
//function in iframe2
function refreshPage()
{
document.location.reload();
}
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>
</div>
And my Javascript code:
function refreshGranite() {
var iframe = document.getElementById('divGranite')
iframe.innerHTML = iframe.innerHTML;
}
Hope this helps.
You need to use
[0].src
to find the source of the iframe and its URL needs to be on the same domain of the parent.
setInterval(refreshMe, 5000);
function refreshMe() {
$("#currentElement")[0].src = $("#currentElement")[0].src;
}
you can do it like this
$('.refrech-iframe').click(function(){
$(".myiframe").attr("src", function(index, attr){
return attr;
});
});
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>
以下解决方案肯定会起作用:
window.parent.location.href = window.parent.location.href;
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.