【问题标题】:iframe alternativeiframe 替代品
【发布时间】:2011-11-27 07:43:49
【问题描述】:

在我问我的问题之前,我已经经历了这个:Better alternative to an iframe?,并没有找到解决我问题的方法,或者我没有正确理解!

我有一个 HTML 页面,其中包含左侧的 Dojo 树。当我点击左侧树上的一个元素(比如 element1)时,我在右侧加载了一个带有 url 的 iframe:

www.something.com?selected=element1

现在框架的来源是一个执行此操作的jsp:

<% 
/* Get the user selection*/
String selectedElement = request.getParameter("selected");

/* Code to Fetch some content from the database using the above string */
%>

由于左侧树有许多元素,单击每个元素会加载右侧的 iframe,如上所示。安排工作得很好。但我想知道这是否是最好的方法?我可以不使用 iframe 并且仍然获得相同的结果吗?我在某处读到加载 iframe 比不加载 iframe 慢几倍。 任何帮助将不胜感激!

【问题讨论】:

    标签: javascript jsp iframe


    【解决方案1】:

    如果链接在同一个域中,您可以使用 jQuery 加载来填充 DIV 而不是 iframe。从组织的角度来看,这会更好,并使您的页面更容易为有可访问性问题的人导航。如果内容来自另一个域,除非您在服务器上处理请求,否则您将无法使用 iframe。

    <div id="menu">
        <a class="menu-item" href="/?selected=foo">Foo</a>
        <a class="menu-item" href="/?selected=bar">Bar</a>
        ...
    </div>
    
    <div id="content">
      ...default content...
    </div>
    
    <script type="text/javascript">
       $(function() {
           $('.menu-item').click( function() {
               $('#content').load( $(this).attr('href') );
               return false;
           });
       });
    </script>
    

    道场示例

    <script type="text/javascript">
       dojo.ready( function() {
           dojo.query('.menu-item').onclick( function() {
               dojo.xhrGet({
                  url: dojo.attr(this,'href');
                  load: function(content) {
                       dojo.byId('content').innerHtml = content;
                  }
               });
               return false;
           });
       });
    </script>
    

    【讨论】:

    • 是的。链接在同一个域中。但是我已经在使用 dojo,所以我也不想使用 jQuery。上面的javascript是你写的关于jQuery的吗?
    • @rgamber - 是的,它是 jQuery,但我确信 Dojo 也有类似的功能。
    • 好的!是这样想的..我没有使用过jQuery。但我会研究一个道场替代方案。感谢您的建议。
    • @rgamber - 我为处理程序添加了一些(未经测试的)Dojo 代码。
    • 感谢您的努力。我也在调查它。看起来像一个简单的 ContentPane 小部件有一个 'href' 属性,也可以用来实现相同的结果..
    【解决方案2】:

    使用 iframe 包含来自 与父页面相同服务器的页面片段对于 SEO 和用户体验来说非常糟糕。机器人不会索引 iframe 的内容作为父页面的一部分。 Ctrl+单击或复制应该以 iframe 结尾的链接可能会导致“wtf?”最终用户看到结果时的体验。

    只需使用服务器端包括&lt;jsp:include&gt;

    <jsp:include page="${param.selected}.jsp" />
    

    提供element1.jsp等。

    Ajax-loading 也是一个选项,但请这样做unobtrusively(即它必须在禁用 JS 的情况下以相同的方式工作,请参阅 tvanfosson 是如何演示的)。这样您就可以接触到更广泛的受众和更好的 SEO。

    【讨论】:

    • 好吧,我知道 ,但我认为我不能在这个场景中使用它,因为用户必须单击一个 javascript 元素。由于页面已经被渲染,jsp/java 内容将不再存在。这假设我理解你的权利..
    • 在浏览器中禁用 JS。您会看到搜索机器人和大多数智能手机看到的内容。不要忘记点击我回答中的“不显眼”链接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    • 1970-01-01
    • 1970-01-01
    • 2023-01-11
    • 1970-01-01
    • 2012-03-09
    相关资源
    最近更新 更多