【问题标题】:When is it acceptable to use a FRAMESET什么时候可以使用 FRAMESET
【发布时间】:2026-01-11 01:30:01
【问题描述】:

在我的 Java EE 应用程序页面中,我有 header.jsp、side menu.jsp、body.jsp 和 footer.jsp。侧边菜单包含 jQuery dynatree 插件。当用户单击树中的菜单项时,应使用适当的页面(也是 .jsp)更改正文。我正在使用瓷砖框架,我在 layout.jsp 页面中导入所有 js 代码。我想实现复制框架集的效果,但没有实际使用框架集。我认为框架集很难管理并且需要时间来加载。

谁能建议我如何解决这个问题?如果我在激活 dynatree 节点时使用 AJAX 获取每个页面,那么我必须手动更新页面。如果我在body.jsp 中使用IFRAME,那么我必须重新导入所有插件js 代码,因为框架将无法访问主页上的js 功能。

我想要高效的 html 页面管理。

【问题讨论】:

  • "什么时候可以使用 FRAMESET?" 1999.

标签: java jquery html spring


【解决方案1】:

由于您使用的是 jQuery,您应该能够将 AJAX 与应用事件的 live 方法(see the docshere)结合使用。这种方法称为“事件委托”,即使 jQuery 会像魔术一样为你做这件事,你也应该understand what is happening。根据您使用的 jQuery 版本,您可能会使用 delegate 而不是 live - 本质上是一样的。

框架集实际上在 HTML5 中已被弃用——您应该避免使用它们,因为很快它们将在新的用户代理中完全不受支持。请参阅 http://www.useit.com/alertbox/9612.html 进行冗长的讨论,希望能劝阻您不要考虑这种方法。

IFRAME 方法是一种 hack。你也许可以让它工作,但你是在把一个方形钉子锤进一个圆孔。

底线,如果您不想直接深层链接到内页,AJAX 是最好和首选的解决方案。结合事件委托,它确实优于任何旧的或 hacky 的解决方案。而且,一定要使用“progressive enhancement”的想法——如果有人点击了这些链接并且关闭了javascript,内容应该仍然加载。这意味着您从常规直接链接开始,然后为那些启用了 javascript 的用户添加花哨的东西。否则,您将关闭一定比例的用户,使其无法访问您主页之外的任何内容。

当您使用 AJAX 进行导航时,您仍然需要为不了解单击您网站上的链接或任何其他网站上的链接的用户做好准备。他们将使用浏览器的“返回”按钮并最终返回 Google 而不是最后一页!那是因为他们通过您的网站进行的导航在他们的浏览器中看起来不像是独特的页面。较新的浏览器中有一些工具可以处理这个问题,但细节有点超出了这个答案的范围。查看 MDN 上的 this article 了解有关操纵浏览器历史记录的更多信息。

文档

【讨论】:

  • 一旦你掌握了所有这些,你可以考虑使用 history.pushState 和 window.onpopstate 来保持后退和前进按钮的工作,至少在 Firefox 和 Chrome 中是这样。
  • 很好,我会添加一个关于这个的简介。