javascript - Return ID of all iframes in a page - Stack Overflow

Because of the widget format I'm working with I have a page which has multiple iframes embedded wi

Because of the widget format I'm working with I have a page which has multiple iframes embedded within iframes. I won't paste the code as it's vast and unwieldy but it is essentially just this:

<html>
    <head></head>
    <body>
        <iframe>
            <html>
                <head></head>
                <body>
                    <iframe>
                        <html>
                            <head></head>
                            <body>
                                <iframe>
                                    <html>
                                        <head></head>
                                        <body>
                                        blah
                                        </body>
                                    </html>
                                </iframe>
                            </body>
                        </html>
                    </iframe>
                </body>
            </html>
        </iframe>
    </body>
</html>

However, there may be more - or less - iframes dependent upon the page and template I use.

I'm trying to therefore get the ID of all of the iframes in this page, from within the most-embedded iframe.

Is this possible with jQuery? I've tried a few snippets of code but had no luck:

$('iframe', window.parent.document).each(function() {
    console.log($(this).attr("id"));
});

$('iframe', parent.document).each(function() {
    console.log($(this).attr("id"));
});

$('iframe').each(function() {
    console.log($(this).attr("id"));
});

The output of these is a single ID string - and unfortunately it's not the iframe I'm looking to control.

Thanks in advance,

Because of the widget format I'm working with I have a page which has multiple iframes embedded within iframes. I won't paste the code as it's vast and unwieldy but it is essentially just this:

<html>
    <head></head>
    <body>
        <iframe>
            <html>
                <head></head>
                <body>
                    <iframe>
                        <html>
                            <head></head>
                            <body>
                                <iframe>
                                    <html>
                                        <head></head>
                                        <body>
                                        blah
                                        </body>
                                    </html>
                                </iframe>
                            </body>
                        </html>
                    </iframe>
                </body>
            </html>
        </iframe>
    </body>
</html>

However, there may be more - or less - iframes dependent upon the page and template I use.

I'm trying to therefore get the ID of all of the iframes in this page, from within the most-embedded iframe.

Is this possible with jQuery? I've tried a few snippets of code but had no luck:

$('iframe', window.parent.document).each(function() {
    console.log($(this).attr("id"));
});

$('iframe', parent.document).each(function() {
    console.log($(this).attr("id"));
});

$('iframe').each(function() {
    console.log($(this).attr("id"));
});

The output of these is a single ID string - and unfortunately it's not the iframe I'm looking to control.

Thanks in advance,

Share Improve this question asked Sep 19, 2013 at 7:54 turbonerdturbonerd 1,3065 gold badges31 silver badges72 bronze badges 3
  • 2 That is seriously impressive, a downvote within 14 seconds of posting the question... :) Any reason why? – turbonerd Commented Sep 19, 2013 at 7:54
  • Are all iframes on the same domain? – CodingIntrigue Commented Sep 19, 2013 at 7:57
  • RGraham: yes, they are. – turbonerd Commented Sep 19, 2013 at 8:34
Add a ment  | 

3 Answers 3

Reset to default 3

EDITED

This returns an iframe element which has the wanted id, and null, if the wanted id is not found.

function searchIds(wantedId) {
    var idArray = [], n,
        search = function (iframes) {
            var n;
            for (n = 0; n < iframes.length; n++) {
                if (iframes[n].frames.length > 0) {
                    search(iframes[n].frames);
                }
                idArray.push(iframes[n].frameElement.id);
                idArray.push(iframes[n].frameElement);
            }
        };
    search(window.top.frames);
    for (n = 0; n < idArray.length; n += 2) {
        if (idArray[n] === wantedId) {
            return idArray[n + 1];
        }
    }
    return null;
}

Notice, that searchIds() can't be run before onload of the main window has been fired.

I do not believe you can reference the iframe's children directly. You will need to recursively search each iframe using it's .contents() call.

As far as I know, this will only work as long as the same-origin policy is not violated (i.e. the iframes must point to the same domain).

From the most embedded iframe:

var ids = (function up( context, ids ){ 
   ids = ids || []; 
   // proceed if we're not at the top window yet
   if( context !== window.top){
      // point context to parent window (or top if no parent).
      context = context.parent || window.top; 
      // get the id of the first iframe in parent window; 
      // this will break if there are sibling iframes
      ids.push(context.document.getElementsByTagName('iframe')[0].id); 

      // recursive call to traverse parents          
      return up(context, ids); 
   } else {
      // otherwise return the list of ids
      return ids; 
   }
   }(this)); // 'this' is the initial context - current window

   console.log( ids );

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1742287467a4415580.html

相关推荐

  • javascript - Return ID of all iframes in a page - Stack Overflow

    Because of the widget format I'm working with I have a page which has multiple iframes embedded wi

    1天前
    20

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信