【问题标题】:Browser busy indicator when loading data加载数据时浏览器繁忙指示器
【发布时间】:2012-04-10 14:06:30
【问题描述】:

我正在努力实现here 的解释。

我正在尝试使用动态脚本标签将一些数据从服务器加载到客户端。 (即我创建一个脚本标签,将其 src 设置为我的 JSON 控制器并将其附加到我的头或身体标签)。

脚本正确加载从服务器返回的数据。但是在脚本加载期间, 浏览器不显示忙碌指示符(尝试使用 Chrome/Firefox)(根据this reference(第 35 页),这应该是默认行为)。

我还在我的服务器端方法中添加了Sleep 方法来模拟长时间运行的进程,以查看繁忙指示符出现。但仍然没有运气。

附:当我使用IFrame 而不是script 时,一切正常,浏览器显示繁忙指示器。但不能用脚本标签来做。

【问题讨论】:

  • 是否可以选择使用 Block UI 插件之类的东西?如果您已经对 jQuery 进行了投资,那么效果相当好(否则)。
  • Block UI 只是改变了光标图标。我真正想要的是看到标签上的旋转指示器。我很困惑 facebook 是如何做到的。它也使用 IFrame 吗?

标签: javascript ajax iframe


【解决方案1】:

在网页上异步加载组件不会在非 IE 浏览器中触发浏览器的购买图标。甚至对于 facebook 也是如此。尝试点赞一些帖子或在墙上写点东西,这两个操作都不会在非 IE 浏览器中显示浏览器的购买图标。

【讨论】:

  • 在演示部分导航到http://developers.facebook.com/docs/reference/plugins/comments/,点击View NUMBER_OF_COMMENTS more,其中NUMBER_OF_COMMENTS很好,cmets的数量。查看浏览器指示器。它确实会在不刷新整个页面的情况下变为忙碌。我怀疑他们正在使用 iframe。
  • 它显示加载个人资料图像的繁忙图标,但不显示通过 AJAX 生成的整个数据
  • @Epuri 当您在 Facebook 的页面之间导航时,不会发生完整的页面重新加载。以前的页面内容将被删除并获取新的内容,并且浏览器加载指示符使每个人都认为这是一个完整的页面重新加载,但事实并非如此。您可以通过修改标题中的某些内容(使用浏览器开发人员工具)来检查它,然后导航到另一个页面。更改将保留。
【解决方案2】:

简而言之:

facebook 在加载页面数据时确实使用 iframe,浏览器加载指示器并没有什么神奇之处。


更多细节:

当你从一个页面导航到另一个页面时,FB 会向 DOM 中注入一个隐藏的 iframe,并且它的 src 属性将设置为你所询问的页面(有几个参数表明这是一个类似 ajax 的请求,而不是整页刷新)。所以页面实际上是在隐藏的 iframe 中加载的。然而,内容不是 HTML,而是一堆 javascript 标签,它们使用一些 JSON 对象,其中包含呈现页面所需的 HTML 和其他数据。
下面是在 iframe 注入 DOM 时加载页面时我的 firebug 控制台。您可以检查页面加载完成后是否删除了 iframe。

要了解这些脚本如何加载页面数据,您可以阅读BigPipe Technique。简而言之,它将每个页面的构建分解为几个所谓的 pagelet,它们有自己的一组 CSS 和 JS 资源,因此每个 pagelet 的资源可以从与其他 pagelet 并行的服务器中获取。 big_pipe 将设法在所有资源都可用后将每个 pagelet 放入它的容器中。

【讨论】:

  • 他们的方法不适用于所有浏览器。值得注意的是,Safari 和后来的 IE 在浏览器 UI 方面根本不响应 iframe 加载。
猜你喜欢
  • 2013-07-17
  • 2012-05-28
  • 1970-01-01
  • 2020-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多