新闻网站,例如《福布斯》 / Zdnet如何无缝地将一个网页合并到另一个网页中?


14

如果您去例如:

当您到达页面底部时,将加载新新闻故事,并且Internet浏览器中的URL会更改为该下一新闻故事的URL。所以我想知道一个网页如何几乎可以立即加载下一个网页,而页面之间的延迟几乎可以忽略不计。例如,他们是否预先下载了“下一则新闻”故事的网页,然后真正快速地加载了网页?


1
按住End键,您将看到加载过程的延迟。
MonkeyZeus

5
更为重要的问题是他们为什么要这样做。

Answers:


25

简短的答案是,页面的客户端Javascript代码检测到您何时“过于接近”页面底部,并在出现这种情况时向服务器请求更多数据。

无需太过技术,他们就不会重新加载整个网页。而是该页面上的Javascript代码从服务器请求更多数据,然后当它接收到新数据时,便将该数据添加到当前页面。页面中不需要更改的部分将保持完全不变。

最现代的方法是使用HTML5历史记录修改功能,这似乎是这些网站正在使用的功能。


4
您的描述缺少一个步骤:他们实际上在更改历史记录,以及向页面添加更多数据。这使得你的“做最现代的方式这样一种尴尬”,因为涉及到修改历史,这实际上不获取在答复中提到的过程。(在语法上,将涉及到离开页面的其余部分不变,或者可能以将数据添加到页面,这通常与AJAX做的,不能与HTML5历史的修改功能来完成。)
KRyan

那么,URL更改又如何,又不强制重新加载又如何呢?因为在链接上,如果您重新加载“修改后的页面”(例如/second),则会出错。OP的新闻网站不会发生这种情况-他们会精确更改URL,以便您可以共享它。
OJFord

@OllieFord就是历史API的用途。history.pushStatehistory.replaceState允许您在地址栏中更改URL,而无需离开当前页面。它是对更改URL片段(#something)的较老技巧的更现代的替代,其主要优点是历史API允许您推送服务器可以参与生成的“真实” URL,而片段内容必须得到完全支持从客户端。
hobbs 2015年

啊好吧。但是正如我所说,该演示程序已损坏,这令人困惑。
OJFord

由于某种原因,当我提出这个问题时,我熟悉的历史演示完全被打破了,因此该链接是我发现的第一个似乎完全起作用的链接。随时建议一个更好的链接。
Ixrec

20

了解发生情况的一大关键:可以通过Javascript在地址栏中设置URL,而无需实际重定向用户。要查看实际效果,请将以下代码粘贴到受支持的浏览器控制台中。请注意,它将地址栏更改为http://programmers.stackexchange.com/yay.html

history.pushState(null,null,'/yay.html')

这种方法的好处是,如果用户在滚动到故事后添加了书签,则书签将知道将用户发送到哪里。DeviantArt无限滚动搜索结果就是这种行为的一个很好的例子。


等等,DeviantArt在其搜索结果中实现了历史记录修改,因此您实际上可以链接到/添加书签/以其他方式记录特定页面吗?那是...相当的东西。但是,特定结果将在特定查询的特定页面上保留多长时间?如果您添加了书签,我希望明天不会在该特定页面上看到相同的结果...我必须记得对此进行调查。
KRyan 2015年

@KRyan只是修改了offset跳过结果集一定距离的参数。由于默认的排序顺序似乎一直“很受欢迎”,因此结果可能有些稳定,但如果将排序顺序切换为“最新”并搜索流行的内容,则肯定不是这样。
hobbs 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.