iFrames Page load

Discussion in 'Javascript' started by adnanx82@gmail.com, May 2, 2005.

  1. Guest

    Hi,

    I was wondering if anyone knew how to perform the following 2 tasks in
    Javascript:

    1) distinguish between frames and iframes (during an onload event for
    example)
    2) figure out whether a container page has finished loading completely
    with all its component frames or iframes (onload event is not useful
    because we have more than one onload, and container page onload is not
    always the last one for iframes).

    Thanks,

    -Adnan.
    , May 2, 2005
    #1
    1. Advertising

  2. kaeli Guest

    In article <>, adnanx82
    @gmail.com enlightened us with...
    > Hi,
    >
    > I was wondering if anyone knew how to perform the following 2 tasks in
    > Javascript:
    >
    > 1) distinguish between frames and iframes (during an onload event for
    > example)


    Depends.
    Checking from where, the window itself or a containing window?
    Generally, you can't tell, but you might be able to fudge it by checking
    getElementsByTagName and putzing around.

    > 2) figure out whether a container page has finished loading completely
    > with all its component frames or iframes (onload event is not useful
    > because we have more than one onload, and container page onload is not
    > always the last one for iframes).


    I can't think of a way, other than having every child and the container set
    variables when they load, then checking those variables.
    A hack, basically. Not pretty.

    --
    --
    ~kaeli~
    Practice safe eating - always use condiments.
    http://www.ipwebdesign.net/wildAtHeart
    http://www.ipwebdesign.net/kaelisSpace
    kaeli, May 3, 2005
    #2
    1. Advertising

  3. Jerome Bei Guest

    >>2) figure out whether a container page has finished loading completely
    >>with all its component frames or iframes (onload event is not useful
    >>because we have more than one onload, and container page onload is not
    >>always the last one for iframes).

    >
    >
    > I can't think of a way, other than having every child and the container set
    > variables when they load, then checking those variables.
    > A hack, basically. Not pretty.
    >


    I don't know if this works for Mozilla or Opera, but using IE, you could
    check the readyState of the (i)frames contained in your main window:

    <html>
    <head>
    <script>
    Globals={
    checkReadyState:function() {
    for (var f=0; f<document.frames.length; f++) {
    frame = document.frames(f);
    while (frame.document.readyState!="complete") {
    status+="."; // just wait ...
    }
    }
    }
    };
    </script>
    </head>
    <body onload="Globals.checkReadyState();">
    <iframe src="test.html">
    <iframe src="test.html">
    <iframe src="test.html">
    <iframe src="test.html">
    </body>
    </html>
    Jerome Bei, May 3, 2005
    #3
  4. Csaba Gabor Guest

    wrote:
    > 1) distinguish between frames and iframes (during an onload event for
    > example)


    Unclear what the reference point is on this, but if the i/framed window
    is wondering (and it's not a cross domain situation), what about:
    window.frameElement.nodeName

    > 2) figure out whether a container page has finished loading completely
    > with all its component frames or iframes (onload event is not useful
    > because we have more than one onload, and container page onload is not
    > always the last one for iframes).


    One approach is to have a variable at the top level which each loaded
    frame increments (in its onLoad routine). When all frames have
    loaded, then the variable's value will equal the number of i/frames
    (which each onLoad routine is, of course, checking for. In that
    event, the top.everybodyLoaded routine can kick off). The post below
    illustrates this for the two i/frame case (the variant at the bottom
    is closer to what I'm talking about here).
    http://groups-beta.google.com/group/alt.html/msg/9971708cb459e632

    Good luck,
    Csaba Gabor from Vienna.
    Csaba Gabor, May 3, 2005
    #4
  5. Csaba Gabor Guest

    Csaba Gabor wrote:
    > wrote:
    >> 2) figure out whether a container page has finished loading completely
    >> with all its component frames or iframes (onload event is not useful
    >> because we have more than one onload, and container page onload is not
    >> always the last one for iframes).

    >
    > One approach is to have a variable at the top level which each loaded
    > frame increments (in its onLoad routine). When all frames have
    > loaded, then the variable's value will equal the number of i/frames
    > (which each onLoad routine is, of course, checking for. In that
    > event, the top.everybodyLoaded routine can kick off). The post below
    > illustrates this for the two i/frame case (the variant at the bottom
    > is closer to what I'm talking about here).
    > http://groups-beta.google.com/group/alt.html/msg/9971708cb459e632


    Here's a concrete example that I put together on FF 1.0 / IE 6
    that checks whether all the frames are loaded (but not for the
    container page being loaded).

    <html><head><title>Multiload Test</title>
    <script type='text/javascript'>
    loadCount = 0;
    function everybodyLoaded() {
    alert("Number of frames loaded: " +
    window.frames.length); }
    </script>
    </head><body>
    <iframe src="javascript:'<body onload=&quot;
    alert(&amp;#34;I\'m a/n &amp;#34;+
    window.frameElement.tagName);
    if (++parent.loadCount==
    parent.frames.length) parent.setTimeout(parent.
    everybodyLoaded,0)&quot;>Frame 1</body>'">
    </iframe>
    <iframe src="javascript:'<body onload=&quot;
    if (++parent.loadCount==
    parent.frames.length) parent.setTimeout(parent.
    everybodyLoaded,0)&quot;>Frame 2</body>'">
    </iframe>
    </body>
    <html>


    Also, it is (I think) instructive to see what happens
    if you replace the two lines starting with 'alert' in
    the main body (in other words, lines 10 and 11) with
    the following 3 lines:

    window.setTimeout(&amp;#34;alert(
    \\&amp;#34;I\'m a/n \\&amp;#34;+
    window.frameElement.tagName)&amp;#34;,0);

    In this case, the alert does not hold up processing until
    the onLoad of IFrame 1 has finished (by the alert being
    responded to). Rather, that onLoad finishes along with
    the others so that everybodyLoaded can run.

    In IE6, the alert from everybodyLoaded (run from the onLoad
    of IFrame 2) must be dismissed before the alert for IFrame 1
    (pending from the setTimeout) will run.

    However, in FF 1, both alerts will be shown, the IFrame 1
    alert on top of the everybodyLoaded alert.

    Csaba Gabor from Vienna
    Csaba Gabor, May 3, 2005
    #5
  6. kaeli Guest

    kaeli, May 3, 2005
    #6
  7. Guest

    Thanks for your replies. Keeping a count of frames loaded works if the
    frames are produced statically in the html. However, if there is
    javascript code that generates frames dynamically, we don't know for
    sure what the number of frames would be in the frames array when the
    onLoad event is called for a particular frame (There might still be
    more frames being added to the document).

    I think setting variables in each frames window and container window
    when that window's onLoad event fires might work. After setting the
    variable, it could go through all the frames in the top window and if
    all of them have the variable set to true, then we know that that
    onLoad was the last onLoad and the page (with all the component
    windows) has finished loading. However, again, I am not sure what the
    implication is on pages which dynamically generate frames or iframes
    using document.write()...Will this work all the time? Is it possible
    that all the frames in the frames array and the container page have
    finished loading but there still other frames that are just about to be
    added?

    In case you're wondering, I'm writing a generic solution, so I don't
    know about the structure of the pages and would like to have a generic
    way of figuring out the completion of the load for a container page
    along with all of its component frames/iframes.

    Thanks very much for your help everyone.

    -Adnan.
    , May 3, 2005
    #7
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. John
    Replies:
    1
    Views:
    3,348
    Boyd Ferris
    Oct 16, 2004
  2. venky

    Page Load and webcontrol page load

    venky, Jul 6, 2005, in forum: ASP .Net
    Replies:
    5
    Views:
    3,075
    venky
    Jul 11, 2005
  3. xboxsnippets.com

    Using iFrames on your front page

    xboxsnippets.com, Jan 24, 2005, in forum: HTML
    Replies:
    4
    Views:
    502
    gonebye
    Jan 26, 2005
  4. Matcon
    Replies:
    3
    Views:
    21,522
    Matcon
    May 28, 2008
  5. Remy Sharp

    Detect if iframes successfully load

    Remy Sharp, Jul 24, 2003, in forum: Javascript
    Replies:
    0
    Views:
    97
    Remy Sharp
    Jul 24, 2003
Loading...

Share This Page