在我的 Java EE 应用程序页面中,我有 header.jsp、侧边 menu.jsp、body.jsp 和 footer.jsp。侧面菜单包含 jQuery dynatree 插件。当用户单击树中的菜单项时,应使用适当的页面(也是 .jsp)更改正文。我正在使用tiles框架,在其中导入layout.jsp页面中的所有js代码。我想实现复制框架集的效果,但不实际使用框架集。我认为框架集很难管理并且需要时间加载。
谁能建议我如何解决这个问题?如果我在激活 dynatree 节点时使用 AJAX 来获取每个页面,那么我必须手动更新页面。如果我在 body.jsp
中使用 IFRAME
,那么我必须重新导入所有插件 js 代码,因为框架将无法访问主页上的 js 功能。
我想要高效的 html 页面管理。
最佳答案
由于您使用的是 jQuery,因此您应该能够将 AJAX 与应用事件的 live
方法结合使用( see the docs 或 here )。这种方法称为“事件委托(delegate)”,尽管 jQuery 会像魔术一样为您完成此操作,但您应该 understand what is happening 。根据您使用的 jQuery 版本,您可能会使用 delegate
而不是 live
- 本质上是一样的。
框架集实际上在 HTML5 中已被弃用——您应该避免使用它们,因为很快新的用户代理将不再支持它们。请参阅http://www.useit.com/alertbox/9612.html进行冗长的讨论,希望可以阻止您考虑这种方法。
IFRAME
方法是一种 hack。您也许能够让它发挥作用,但您是将一个方钉锤入一个圆孔中。
底线,如果您不想直接深层链接到内部页面,AJAX 是最好且首选的解决方案。与事件委托(delegate)相结合,它确实优于任何旧的或黑客解决方案。并且,请务必使用“progressive enhancement”的想法——如果有人单击这些链接并关闭了 javascript,内容仍应加载。这意味着您从常规的直接链接开始,然后为那些启用了 JavaScript 的用户添加一些奇特的东西。否则,您将关闭一定比例的用户,使其无法访问主页以外的任何内容。
当您使用 AJAX 进行导航时,您仍然需要为用户做好计划,因为他们无法理解单击您网站或任何其他网站上的链接时的区别。他们将使用浏览器的“后退”按钮并最终返回 Google,而不是最后一页!这是因为他们在您网站上的导航在他们的浏览器中看起来不像是唯一的页面。较新的浏览器中有一些工具可以处理此问题,但详细信息有点超出了本答案的范围。查看this article在 MDN 上了解有关操作浏览器历史记录的更多信息。
文档
- jQuery 的
live
- http://api.jquery.com/live/ - jQuery 的
委托(delegate)
- http://api.jquery.com/delegate/ - David Walsh 谈 Activity 代表团 - http://davidwalsh.name/event-delegate
- Jakob Nielsen 谈车架 - http://www.useit.com/alertbox/9612.html
- MDN 关于浏览器历史记录修改 - https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history
- jQuery for Designers 博客,其中包含
delegate
的示例用例 - http://jqueryfordesigners.com/simple-use-of-event-delegation/ - 关于渐进增强的维基百科文章 - http://en.wikipedia.org/wiki/Progressive_enhancement
关于java - 什么时候可以使用 FRAMESET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10047145/