为了使IM Client始终保持登录状态,Facebook通过在将页面插入文档之前使用AJAX加载页面来避免整个页面加载。
但是,在Facebook AJAX请求期间,浏览器似乎正在加载。重新加载按钮变为X,浏览器中内置的进度指示器指示正在加载/正在等待等)
我已经能够成功实现基于AJAX的导航,但是我的浏览器没有显示任何加载迹象(由于请求是异步的),Facebook如何做到这一点?
当文档中正在加载的元素时,浏览器将显示加载状态。Ajax请求完全来自JavaScript。该文档不会受到影响,因此不会触发加载状态。
另一方面,Facebook的大多数请求都是通过<script>在文档中插入标签,指向包含所需数据的JavaScript文件来进行的。(基本上是JSONP,除非它们使用不同的格式。)浏览器将显示其加载状态,因为<script>标签是文档中的未加载元素。
<script>
如果您不小心,此技术/ JSONP可能会使您的站点面临安全风险,因为允许跨站点请求。Facebook通过为每个资源生成随机URL来处理此问题,该URL在初始页面加载时发送到浏览器。