第14章 Web应用程序
14.1 History API
History API 是用于在 JavaScript 中对浏览器的 URL 及历史信息进行操作的 API。过去,大部分的 Web 应用程序都是由服务器端负责程序逻辑,客户端则主要负责信息显示。而最近,将复杂的状态变化移至客户端进行管理的 Web 应用程序多了起来。由于在客户端通过 AJAX 方式更新内容时不会改变页面的 URL,因此必须通过 JavaScript 对 URL 进行管理以始终应对页面的状态变化。
然而,如果只是改写页面的 URL,就将会发生页面跳转,且 JavaScript 的状态也会在这时被重置。于是出现了 History API。如果使用 HistoryAPI,就能够在不发生页面跳转的情况下将 URL路径替换为任意内容。
14.1.1 History API的定义
14.1.2 哈希片段
AJAX应用程序与哈希片段
原本 URL 的作用是用于唯一识别 Web 上的某一内容。然而对于运用了 AJAX 技术的页面来说,即使不进行页面跳转也能够自由地改写页面内容。此时如果无法对 URL 进行有序的管理,则可能会出现同一个 URL 表示了完全不同的内容的情况。
正如不存在没有地址栏的浏览器,URL 与 Web 应用程序也是不可分割的概念。如果 URL 无法履行其唯一识别 Web 内容的这一原本的功能的话,浏览器的书签功能就将失效,
而使用外部内容的链接也将成为一个难题。
为了解决这一问题,现在很多的 AJAX 应用程序都采用了哈希片段(URL 中 # 之后的字符串)这一方式。由于哈希片段使用的就是页面内的链接,因此即使改写了哈希片段也不会发生页面跳转(向服务器发送请求)。利用这一机制以哈希片段来表示页面的状态后,就能够以唯一的 URL 来表示应用程序的特定状态了。
哈希片段与网络蜘蛛
使用哈希片段的 AJAX 应用程序有一个问题,即之前提到的不能很好地支持搜索引擎等的网络蜘蛛。通常网路蜘蛛不会对应用程序中包含的 JavaScript 进行解读,所以无法在获取页面后抓取通过 JavaScript 动态载入的内容。因此,为了让网络蜘蛛能够收集页面的内容,则必须在服务器端识别网络蜘蛛的访问,并返回不包含 JavaScript 的静态内容。
然而 URL 中哈希片段的部分不会和请求一起发送给服务器。也就是说,服务器无法返回与哈希片段所表示的应用程序状态相对应的合适内容,于是,网络蜘蛛也就无法正确获取 URL原本指示的内容。