棘手:在Firefox中禁止“加载...”标题以进行JSONP轮询

时间:2009-08-13 16:44:41

标签: jquery ajax firefox cross-domain jsonp

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

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

问题是每秒轮询一次进度会导致Firefox在选项卡的标题内不断闪烁“正在加载...”,我觉得这很烦人。 (Firefox之所以这样做是因为JSONP通过脚本标签附加到DOM然后“加载”)。

所以问题的核心是:

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

- FelixGeisendörfer

3 个答案:

答案 0 :(得分:0)

不幸的是,ajax调用只有在完成后才会返回,所以没有办法让它更新你的进度。

我建议使用loading spinner或其他内容。

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

答案 1 :(得分:0)

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

说平均工作需要十分钟。您可以计算平均每秒应该完成的百分比,以及完全在客户端的虚假更新。

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

你可以做一些数学计算,找到你的平均表现和你当前测量的时间之间的中间点,但这取决于你的工作时间的变化。

答案 2 :(得分:0)

这些天来,{p> CORS支持越来越普遍。您现在可以通过使用CORS来确定跨域XMLHttpRequests来正确解决问题,并且检测缺少CORS支持并回归到旧版浏览器的JSONP是微不足道的。

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

它的要点是:

  • 任何现代WebKit浏览器(Safari 4 +,Chrome 3 +,新Flock等)
  • 任何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,但是一个错误导致请求失败)