In my site, I use an iframeA in an iframeB, and, when the iframeA changes it's content I have to set the src. I can set it only with the onload event, but this called when the site is loaded. I am looking for some event or trigger, that helps me detect the location/src change before it starts loading. I don't want to wait the whole page load, before the src set. I have no direct access to iframeA (just the script below)
Some code:
var myframe = document.getElementById('frameB').contentWindow.document.getElementById('frameA');
myframe.onload=function (funcname) {...};
I think adding inline
onload
attribute with appropriate event handler toiframe
tag will solve your problem.Markup change
Check this gist or my answer to this question. The code there does exactly that:
It utilizes the
unload
event. Whenever a page is unloaded, a new one is expected to start loading. If you listen for that event, though, you will get the current URL, not the new one. By adding a timeout with 0 milliseconds delay, and then checking the URL, you get the new iframe URL.However, that
unload
listener is removed each time a new page is loaded, so it must be re-added again on eachload
.The function takes care of all that, though. To use it, you only have to do:
What will be changing the source of the iframe? If you have access to that code then you can do whatever is in your
onload
function then.If a link has it's
target
attribute set to the iframe and that is how the source is changing then you can hi-jack the link clicks:Also, just a side-note, you can bind an event handler for the
load
event in jQuery like this:UPDATE
SITE -> frameB -> frameA
This selects the
#frameB
element (that is in the current top level DOM), gets it's contents, finds the#frameA
element, and then binds an event handler for theload
event.Note that this code must be run after
#frameB
is loaded with the#frameA
element already present in it's DOM. Something like this might be a good idea:UPDATE
To hi-jack links in the
#frameB
element:This will find any link in the
#frameB
element that has itstarget
attribute set toframeA
and add aclick
event handler.And again, this will only work if the
#frameB
iframe element has loaded (or atleast gotten to thedocument.ready
event) so you can select it's elements.You could also try taking the approach of detecting when your iframe is going to leave its current location. This may be useful in some situations. To do this, put the following code in you iFarme source.