Twitter Bootstrap iFrame usage?
Asked Answered
I

1

7

Just started exploring Twitter's Bootstrap and I like what I am seeing. However I have a query over how to implement Tabs that contain an iFrame. I know iFrame's are awful, but when used correctly are useful for displaying different types of data.

I have experience of jQueryUI Tabs which allows me to display iFrame's inside of tabs. However I cannot find any documentation to do the same with Bootstrap.

From a jQueryUI perspective I have done this in the past:

<div id="tabs">
  <ul>
    <li><a class="tabref" href="#tabs-1" rel="page1-iframe.html">Page 1 Title</a></li>
    <li><a class="tabref" href="#tabs-2" rel="page2-iframe.html">Page 2 Title</a></li>
  </ul>
  <div id="tabs-1"></div>
  <div id="tabs-2"></div>
</div>

The above is more advanced than standard jQueryUI Tab implementation.It allows me to off-set the load of the iFrame until the tab is selected by the user which is best way to do it when loading numerous pages etc.

However, I cannot see a similar way with Bootstrap.

Looking for pointers here guys.

Cheers Nick

Impressure answered 9/11, 2012 at 11:46 Comment(0)
P
8

Below is a solution using a custom data-attribute and some jQuery. Or look at the working jsFiddle of the same solution for Bootstrap "LazyLoading" iFrames.

<div class="container">
    <div class="row">
        <div class="span12">
            <ul class="nav nav-tabs" id="myTabs">
              <li class="active"><a href="#home" data-toggle="tab">Home</a></li>
              <li><a href="#dpa" data-toggle="tab">DPA</a></li>
              <li><a href="#twon" data-toggle="tab">Antwon</a></li>
            </ul>

            <div class="tab-content">
              <div class="tab-pane active" id="home">
                  <p>test</p>            
                </div>
              <div class="tab-pane" id="dpa" data-src="http://www.drugpolicy.org/">
                  <iframe src=""></iframe>
                </div>
              <div class="tab-pane" id="twon" data-src="http://player.vimeo.com/video/37138051?badge=0">
                  <iframe src="" width="500" height="203" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe> <p><a href="http://vimeo.com/37138051">ANTWON ♦ HELICOPTER</a> from <a href="http://vimeo.com/tauszik">Brandon Tauszik</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
                </div>
            </div>
        </div>
    </div>
</div>​

<script>
$('#myTabs').bind('show', function(e) {  

    // identify the tab-pane
    paneID = $(e.target).attr('href');

    // get the value of the custom data attribute to use as the iframe source
    src = $(paneID).attr('data-src');

    //if the iframe on the selected tab-pane hasn't been loaded yet...
    if($(paneID+" iframe").attr("src")=="")
    {
        // update the iframe src attribute using the custom data-attribute value
        $(paneID+" iframe").attr("src",src);
    }
});
</script>
Pickwickian answered 9/11, 2012 at 13:52 Comment(4)
that worked great! Do you know of any "resize" function that works with Bootstrap? In the past I have had another function to do this which is a messy and wondered if anything existed inside of this framework?Impressure
How would you load the first frame? I noticed that it off-sets the load for iframe 2 and 3, but iframe 1 only loads if I go to another first. Could do with loading that one when the page loads.Impressure
$(paneID).find("iframe").height($(window).height()-80); works for the height - just added this to the end of your JS.Impressure
Regarding the first tab, yes, I assumed that if an iFrame were present on that tab, then it would load immediately. In such a case, don't use the custom data-attribute; just fill in the iFrame's src attribute as you would normally.Pickwickian

© 2022 - 2024 — McMap. All rights reserved.