我正在努力实现已经解释过的目标here.
我正在尝试使用动态脚本标签将一些数据从服务器加载到客户端。 (即我创建一个脚本标签,将其 src 设置为我的 JSON 控制器并将其附加到我的 head 或 body 标签)。
脚本正确加载从服务器返回的数据。但在脚本加载期间,
浏览器不显示繁忙指示器(尝试使用 Chrome/Firefox)(同时根据这个参考(第 35 页),这应该是默认行为)。
我还添加了Sleep
方法以我的服务器端方法来模拟一个长时间运行的进程,看到繁忙指示器出现。但仍然没有运气。
附注当我使用IFrame
代替script
,一切正常,浏览器显示忙碌指示器。但无法使用脚本标签来做到这一点。
简而言之:
facebook 在加载页面数据时确实使用了 iframe,并且浏览器加载指示器没有什么神奇之处。
更多细节:
当您从一个页面导航到另一个页面时,FB 会向 DOM 中注入一个隐藏的 Iframe,并且其 src 属性将设置为您请求的页面(有几个参数表明这是一个类似 ajax 的请求,而不是整个页面刷新)。所以页面实际上是在隐藏的 iframe 中加载的。然而,内容不是 HTML,而是一堆 javascript 标签,这些标签消耗一些包含 HTML 和呈现页面所需的其他数据的 JSON 对象。
下面是当 iframe 注入到 DOM 时加载页面期间我的 firebug 控制台。您可以检查页面加载完成后,iframe 是否被删除。
要了解这些脚本如何加载页面数据,您可以阅读有关大管道技术。简而言之,它将每个页面的结构分解为几个所谓的页面pagelets,它们有自己的一组 CSS 和 JS 资源,因此每个 pagelet 的资源可以与其他 pagelet 并行地从服务器获取。big_pipe
在所有资源可用后,将设法将每个 pagelet 放入其容器中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)