【发布时间】:2011-05-02 06:26:32
【问题描述】:
当用户浏览照片时,我正在尝试像在 Facebook 上那样实现内容浏览。我想每个人都熟悉照片浏览,您可以单击“下一张”和“上一张”并立即获取下一张或上一张照片(您也可以使用箭头键导航)。
例如,当您单击“下一步”时,您会注意到页面没有刷新 - 只有内容。起初我认为它是使用普通的 ajax 调用来完成的,在这种情况下,它只刷新“内容”,即图像、描述和 cmets。但后来我注意到浏览器“位置”工具栏中的 URL 也发生了变化! 我尝试使用 Firebug 进行检查,发现当您单击“下一步”时,仅下载下一张照片,我仍然不知道从哪里加载 cmets 和图像元数据(描述、时间、标签……) .
谁能解释一下这种技术是如何完成的 - 页面 URL 在没有页面刷新的情况下更改(如果从缓存中刷新,甚至没有页面“闪烁”)。 我知道如何使用 ajax 更改页面内容,但该页面的 URL 始终保持不变。如果我点击“刷新”按钮,我会再次获得第一页。但不是在 Facebook 上,因为即使是“window.location”每次都会更改而没有实际重定向。
我注意到的另一件事是底部工具栏(应用程序、聊天...)“始终位于顶部”。即使您更改页面,此工具栏也不会刷新并且始终保持在顶部 - 它甚至不会像其他刷新的页面(来自网络服务器或来自本地缓存)那样“闪烁”。我想这与上面的技术相同——某种“假”重定向或其他什么?
答案是 pushState
if (window.history.pushState)
window.history.pushState([object or string], [title], [new link]);
你会微笑:)
【问题讨论】:
-
对于它的价值History.js 提供相同的 HTML5 API,同时优雅地降级任何不支持它的浏览器(包括对数据和标题的支持,以及 replaceState 功能)。使用它意味着您不必为 IE9 更改更改代码。
标签: ajax facebook redirect refresh