【问题标题】:Tricky: Surpress "Loading ..." title in Firefox for JSONP polling棘手:在 Firefox 中为 JSONP 轮询取消“正在加载...”标题
【发布时间】:2010-11-19 09:07:52
【问题描述】:

我正在开发一个 jQuery 插件,人们可以将它包含在他们自己的页面中。该插件在我正在运行的位于不同域的服务中生成作业。

为了突破域边界,我使用了 jQuery 的 JSONP 功能,该功能可以很好地生成作业。但是,我还需要显示“进度”(0 -> 100%)。到目前为止,我的计划是不断“轮询”工作的进展(彗星会更好,但 AFAIK 不可能跨域)。

问题是每秒轮询进度会导致 Firefox 在标签标题中不断闪烁“正在加载...”,我觉得这很烦人。 (Firefox 这样做是因为 JSONP 通过附加到 DOM 的脚本标签来工作,然后它会“加载”)。

所以我的问题是:

是否可以隐藏“正在加载...”选项卡标题消息 - 或者 - 是否有更好的方法以跨域方式“流式传输”进度更新?

-- 费利克斯·盖森多夫

【问题讨论】:

    标签: jquery ajax firefox cross-domain jsonp


    【解决方案1】:

    不幸的是,ajax 调用只有在完成后才会返回,因此无法让它更新您的进度。

    我建议使用loading spinner 或其他名称。

    如果绝对要求显示精确的加载进度,您可能需要从不同的角度进行处理。

    【讨论】:

    • 对不起,如果我没有说清楚。这与 AJAX 调用的进度无关。这是关于在我的服务器上运行并且可以通过 AJAX 调用轮询的作业的进度。
    • 明白了,对不起,我误会了。我也没有给你答案:(
    【解决方案2】:

    如果这是一项长期运行的工作,也许您可​​以获取一些平均运行时间并为用户伪造它,使用不频繁的轮询来调整您伪造的完成百分比。

    假设一项平均工作需要十分钟。您可以计算出平均每秒应该完成多少百分比,然后完全在客户端伪造更新该数量。

    然后,当您的 30 秒计时器用完时,轮询服务器以获取实际的完成百分比,并更新您的进度条的速率,以便客户端的假货将在服务器作业的新估计完成时间完成。

    您可以做一些数学运算来找到平均表现和当前测量时间之间的中间点,但这取决于运行作业时间的可变性。

    【讨论】:

    • 是的,这基本上就是我最终要做的:)。
    • 有时最好只是作弊。 :)
    【解决方案3】:

    CORS 支持现在越来越广泛。您现在可以通过使用 CORS 来确定跨域 XMLHttpRequests 来正确解决问题,并且检测到缺少 CORS 支持并为旧浏览器回退到 JSONP 是微不足道的。

    第一个链接上有示例检测代码,详细了解它的工作原理on MDC,如果您想了解浏览器兼容性的详细信息,我几天前更新了the Wikipedia article

    它的要点是:

    • 任何现代 WebKit 浏览器(Safari 4+、Chrome 3+、新 Flock 等)
    • Anything Gecko 1.9.1+(Firefox 3.5+、SeaMonkey 2.0+ 等)
    • Internet Explorer 8+ 和任何基于它的东西(Sleipnir 等)......但需要注意的是,它没有实现标志来通过请求传递凭据和 cookie。

    值得注意的例外是:

    • Opera(自 10.61 起不支持)
    • Camino(2.0.5 基于 Gecko 1.9.0 (Firefox 3.0))
    • Arora(从 Arora 0.10.2 开始,它具有 API,但一个错误导致请求失败)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-12
      相关资源
      最近更新 更多