在浏览网站时,网站的某个部分如何保持显示(有点像只加载一次)

How can a section of a website stay displayed (kind of like loaded only once) when navigating the website?

本文关键字:网站 一次 加载 何保持 浏览 个部 显示      更新时间:2023-09-26

我正在制作一个有多个页面的网站。所有的页面都有相同的顶部,导航栏和页脚。当导航到不同的页面时,唯一改变的是页面主体。我想知道的是如何在导航到不同的页面时只加载页面的主体,但保持顶部,导航栏和页脚显示,这样你会得到的效果是除了主体之外什么都没有改变。

你有两个选择:

  • iframes—其中页面主体是iframe元素,您更改iframe src以加载新页面
  • AJAX - JavaScript使用XMLHttpRequest获取新页面的HTML并将其动态加载到body中,而无需重新加载页面

对于这个问题,老派的答案是使用框架。框架完全是你想要的;您有一个页面,其中您为站点的顶部、底部和主窗格指定了单独的HTML文件。导航只是将不同的页面加载到"主"框架中。然而,由于各种原因,这并没有真正做到:它看起来很笨重,有奇怪的滚动行为,并且在链接到其他网站时很烦人。

更好的方法可能是通过AJAX加载主内容。您将显示一个只有页眉和页脚的页面,然后使用Javascript动态地从服务器上拉出正确的页面,并将其内容插入页面中的占位符div中。导航到其他页面需要运行JS代码来加载链接的内容,并替换占位符中的所有内容。这也有缺点:你需要为历史记录添加特殊的处理(例如,使后退按钮按预期工作)和深度链接(例如,使书签加载正确的内容)。

我建议两者都不做。更好的方法是在所有页面中只包含页眉和页脚内容。有几种方法可以做到这一点,而不必在很多地方重复HTML代码:如果您动态生成页面,请查看layouts,它允许您为所有页面指定可重用的模板。确切的方法取决于您使用的框架,但作为一个示例,下面是如何在Rails中实现它。如果您的页面是静态的(例如,您上传到服务器的一些HTML文件),您将希望做类似的事情,但不是动态生成页面,而是使用静态HTML生成器并编译页面。它允许您在一个地方指定页眉和页脚,然后在单独的文件中指定内容。在编辑它们之后,运行一个命令,它将创建输出文件,其中每个文件都包含页眉和页脚的副本。然后你上传它们。例如,

我正在考虑这个自己的另一个原因,但我在想的是,你可以附加一个javascript事件处理程序到所有锚标记与'href'属性。在触发这些事件时,它将调用XHR(纯js)或$.get(jquery)到目标,转储包含动态主体的div内容,并交换新内容。

您必须考虑将表单提交也移动到XHR方法。

一个已经在使用的例子是www.facebook.com。当您四处单击时,页面会像往常一样刷新。当您打开聊天并开始交谈时,页面开始通过某种Ajax方法重新加载。