更好地替代iframe?

时间:2010-01-20 16:16:46

标签: javascript html css iframe tabs

我有一个带有iframe的页面,其中包含所点击标签的内容。共有3个标签和1个iframe。与点击的每个标签相关的内容的来源被格式化并编码在其他html& css文件。

使用iframe的另一种选择是什么,因为我注意到单击选项卡时,它仍然显示白色背景,类似于加载新页面的时间?

这是我的代码:

<div id="tabs">
<div id="overview">
  <a target="tabsa" class="imagelink lookA" href="toframe.html">Overviews</a>
</div>
<div id="gallery">
  <a target="tabsa" class="imagelink lookA" href="tawagpinoygallery.html">Gallery</a>
</div>
<div id="reviews">
  <a target="tabsa" class="imagelink lookA" href="trframe.html">Reviews</a>
</div>
</div>

<div id="tabs-1">
  <iframe src="toframe.html" name= "tabsa" width="95%" height="100%" frameborder="0">
  </iframe>
</div>

8 个答案:

答案 0 :(得分:15)

使用IFRAME加载动态内容(页面加载后)的唯一替代方法是使用AJAX更新网页上的容器。它非常优雅,通常比将整页结构加载到IFRAME中更快。

答案 1 :(得分:13)

另一种方法是使用AJAX加载选项卡的内容并使用div显示内容。我建议使用现有的Tab库可能是一个选项,而不是试图解决与创建标签相关的所有问题。

如果您愿意尝试,jQuery UI Tab可能会有所帮助。


编辑:使用UI标签的AJAX示例。

首先,HTML将如下所示。

   <div id="tabs">
     <ul>
      <li><a href="toframe.html"><span>Overviews</span></a></li>
      <li><a href="tawagpinoygallery.html"><span>Gallery</span></a></li>
      <li><a href="trframe.html"><span>Reviews</span></a></li>
     </ul>
   </div>

然后确保导入相应的jQuery文件:

  <link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/themes/ui-lightness/jquery-ui.css" type="text/css" media="all" />
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript"></script>
  <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js" type="text/javascript"></script>
  etc...

然后添加代码以创建标签:

   <script type="text/javascript">
$(function() {
    $("#tabs").tabs();
});
</script>

答案 2 :(得分:5)

还有AJAX的替代品

您可以将所有三种可能的内容加载到单独的DIV中。

然后单击选项卡将只显示相应内容的DIV“块”的显示属性,同时使其他两个DIV的显示属性为“无”。

便宜,简单,不需要额外的http请求或编码的AJAX成本。

请注意,如果选项卡的内容基于其他数据动态更改而不是在页面加载时已知,则AJAX是更好的解决方案。

答案 3 :(得分:2)

您不需要脚本。

<ul><li><a href="#foo">foo link</a><li><a href="#bar">bar link</a></ul>
<div class="tab" id="foo">foo contents</div>
<div class="tab" id="bar">bar contents</div>

在大多数浏览器中加上此CSS:.tab:not(:target) { display: none !important; },如果不支持target(任何现代浏览器都支持),默认显示所有内容。

如果您要使用脚本显示内容,请始终使用脚本隐藏它。如果该脚本没有运行,请让它优雅地降级。

答案 4 :(得分:1)

如前所述,您可以使用jQuery或其他库来检索HTML文件的内容并将其填充到div中。然后你甚至可以做一个花哨的淡入淡出使它看起来很漂亮。

http://docs.jquery.com/Ajax/jQuery.get

这些方面的东西:

$.get("toframe.html", function(data){
  $("#tabs-1").html(data);
});

编辑.. 你可以预先填写或点击你可以动态获取

$("#tabs a").click(function(){
   var pagetoget = $(this).attr("href");
   $.get...
})

如果你预填充可以有三个容器而不是你现在拥有的容器,2个隐藏,1个显示和点击功能将隐藏所有容器,除了你想要的容器。

虽然获得的代码更少,但更容易。

答案 5 :(得分:1)

最好将每个标签的内容加载到同一页面上的DIV中,然后在使用JavaScript和CSS显示属性单击标签按钮时切换每个DIV的可见性。

如果你不能这样做那么iframe可能是最好的解决方案。您可以将iframe背景设为透明,请参阅以下内容:

<iframe src="toframe.html" name= "tabsa" width="95%" height="100%" frameborder="0" allowtransparency="true"></iframe>

然后,您需要使用以下命令将以下CSS添加到BODY元素:

BODY { Background: transparent; }

答案 6 :(得分:1)

HTML iframe用于包含/显示非模板内容,例如PDF文件。在SEO和UX意见中,当用于模板内容(即HTML)时,这被认为是不好的做法。

在您的情况下,您只想拥有一个标签面板。这可以通过以下几种方式解决:

  1. 将一堆链接作为标签和一堆div作为标签内容。最初只显示第一个标签内容,并使用CSS display: none;隐藏所有其他内容。通过在标签内容div上相应设置CSS display: block;(显示)和display: none;(隐藏),使用JavaScript在标签之间切换。

  2. 将一堆链接作为标签,将一个div作为标签内容。使用Ajax以异步方式获取选项卡内容,并使用JavaScript将当前选项卡内容替换为新内容。

  3. 将一堆链接作为标签,将一个div作为标签内容。让每个链接发送一个不同的GET请求参数或表示单击选项卡的pathinfo。使用服务器端流控制(PHP的if()或JSP的<c:if>等)或包含功能(PHP的include()或JSP的<jsp:include>等)来包含所需的标签内容取决于参数/ pathinfo。

  4. 在采用基于JavaScript的方法时,我可以热烈建议您采用jQuery

答案 7 :(得分:1)

这是jQuery示例,其中包含您文档中的另一个html页面。这比iframe更加友好。为了确保机器人没有为包含的页面建立索引,只需将其添加到robots.txt

中禁止
<html>
  <header>
    <script src="/js/jquery.js" type="text/javascript">
  </header>
  <body>
    <div id='include-from-outside'></div>
    <script type='text/javascript'>
      $('#include-from-outside').load('http://example.com/included.html');
    </script> 
  </body>
</html>

您还可以直接从Google添加jQuery:http://code.google.com/apis/ajaxlibs/documentation/ - 这意味着可选的自动包含更新的版本和一些显着的速度提升。此外,意味着你必须信任它们只为你提供jQuery;)