【问题标题】:Load iframes on tab click在选项卡单击时加载 iframe
【发布时间】:2016-04-09 09:05:02
【问题描述】:

我有一堆标签,在每个标签中我都有一个 iframe,我只想在按下标签时加载它。我不希望加载页面后加载所有应用程序。这如何实现?

我是 JSP 和 Javascript 的新手..

    <ul class="nav nav-tabs">
        <li class="active"><a data-toggle="tab" href="#home">Home</a></li>
        <li><a data-toggle="tab" href="#menu1">First Menu</a></li>
        <li><a data-toggle="tab" href="#menu2">Second Menu</a></li>
    </ul>


    <div class="tab-content">

       <div id="home" class="tab-pane fade in active">
          <iframe id="iframe1" src=""></iframe>
       </div>

       <div id="menu1" class="tab-pane fade">
          <iframe id="iframe2" src=""></iframe>
       </div>

       <div id="menu2" class="tab-pane fade">
          <iframe id="iframe2" src=""></iframe>
         </div>

    </div>

【问题讨论】:

  • 不要使用 iframe。使用AJAX。 Why?
  • @PDKnight 你应该告诉他原因
  • @PDKnight 现在不使用 iframe 对我来说不是一个选项。我正在将第三方网站的一部分嵌入到我的网页中。
  • 你做不到,真的,没有其他选择吗?不能更改嵌入的第三方网站的代码?
  • @PDKnight 不幸的是,我不能……

标签: javascript jquery jsp iframe


【解决方案1】:

Ajax 更好!

根据@PDKnight 的建议,您应该使用 ajax,在此解决方案结束时,您会明白为什么。

这是一个适合您的工作小提琴(jQuery 代码)。

jQuery(document).ready(function($) {
  $('.nav-tabs > li > a').on('click', function(event) {
    //avoid <a> tag to load his href
    event.preventDefault();
    //getting the main subjects
    var id_of_selected = $(this).attr('load-in');
    var link_to_load = $(this).attr('href');
    var iframe_to_load = $(document).find('#' + id_of_selected);
    console.log(iframe_to_load);
    //make the magic
    if (iframe_to_load.length) {
      iframe_to_load.attr('src', link_to_load); //this fires the link to destinated iframe
      iframe_to_load.parent().addClass('active'); //this make the parent div container of iframe visible
    }

  });
});
.tab-pane {
  display: none;
}
.active {
  display: block;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="nav nav-tabs">
  <li class="active"><a data-toggle="tab" href="https://www.google.com/maps/embed?pb=!1m14!1m12!1m3!1d11173.933562701173!2d12.2363393!3d45.560717000000004!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!5e0!3m2!1sit!2sit!4v1452004351715" load-in="iframe1">WORKING!</a>
  </li>
  <li><a data-toggle="tab" href="http://www.youtube.com" load-in="iframe2">First Menu</a>
  </li>
  <li><a data-toggle="tab" href="http://www.facebook.com" load-in="iframe3">Second Menu</a>
  </li>
</ul>
<div class="tab-content">

  <div id="home" class="tab-pane fade in">
    <iframe width="200" height="200" style="width:200px;height:200px;" id="iframe1" src=""></iframe>
  </div>

  <div id="menu1" class="tab-pane fade">
    <iframe id="iframe2" src=""></iframe>
  </div>

  <div id="menu2" class="tab-pane fade">
    <iframe id="iframe3" src=""></iframe>
  </div>

</div>

您会看到(在控制台中按下“第一个菜单”或“第二个菜单”时)您无法加载不允许 X-ORIGIN 的链接 read more here)。 但是您可以只在 iframe 中加载第一个选项卡(工作的一个),因为谷歌地图允许 X-ORIGIN 嵌入。

如果为你工作,请点赞;)

【讨论】:

  • 我正在和他聊天,他解释说他正在使用生成 iframe 的 Kibana,所以很遗憾,AJAX 无法做到这一点:(
  • 该死! xD Whell iframe 是最后的解决方案:/
  • 哦,我现在在这里看到了很多东西!...箭头...到处都是箭头:D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-02
  • 2019-09-02
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多