强制PreloadJS使用XHR进行所有加载

时间:2014-11-11 16:38:43

标签: xmlhttprequest progress-bar createjs preloadjs

我正在使用PreloadJS作为使用CreateJS库构建的应用程序的一部分。 PreloadJS用于提取清单中列出的图形和音频文件。我设置了一个进度条,并将预加载器的fileprogressfileload事件挂钩以进行更新。我正在加载图片时获得进度更新,所以我可以看到进度条爬行,但我从未获得音频文件的fileprogress更新,只有fileload(文件已完全加载)所以进度条闲置,然后突然跳到100%。由于音频文件是迄今为止最大的资产,因此只要为用户提供有意义的加载进度就会产生问题。

我查看了documentation for PreloadJS,它表明XHR加载是首选方法,因为它确实提供了进度更新,但PreloadJS可以依赖于基于标记的内容(<audio> )加载音频文件。

没有任何文件加载是本地的或跨域的,所以在我看来PreloadJS应该使用XHR。

有没有办法强制PreloadJS将XHR用于所有内容,以便我可以获得一致的进度更新,或者为什么我不会获得这些更大文件的进度事件?

2 个答案:

答案 0 :(得分:3)

我相信PreloadJS和SoundJS中存在开放性错误,这会阻止音频加载报告进度。我记录了两个库的问题: https://github.com/CreateJS/PreloadJS/issues/99 https://github.com/CreateJS/SoundJS/issues/119

其他一些信息: 虽然PreloadJS会尝试并支持基于XHR的加载,但它控制的文件类型,音频加载的工作方式略有不同。

SoundJS实际上将功能注入PreloadJS以处理加载,并且不会尊重useXHR参数,而是依赖浏览器功能(和SoundJS插件)来加载和播放音频。遗憾的是,Web音频需要一个数组缓冲区(加载XHR),而HTML音频则需要HTML标记,因此播放功能决定了音频文件的加载方式。

默认情况下,SoundJS默认按顺序加载/使用以下插件:

  1. WebAudio(因此XHR)
  2. HTML(因此标记加载)
  3. 这个应该支持大多数浏览器的XHR加载和webaudio(IE是几乎总是需要HTML加载的杰出代表)。您可以在开始播放/

    之前手动注册插件来强制插件订单

    感谢您的表现!

答案 1 :(得分:2)

@Lanny是正确的,这个问题存在漏洞。目前,SoundJS的设置方式始终使用标签加载PreloadJS,即使使用通过xhr加载的WebAudio也是如此。结果是,无论插件如何,目前都无法获得进度事件。

好消息是我们目前正在修改PreloadJS和SoundJS之间的加载方式,这个问题应该得到解决。