1

我有一个JavaScript小部件,可以在图像帧之间切换以创建运动,当其提供方法,并在处置方法。

该实现通过使用PreloadJS工作(http://www.createjs.com网站/#!/预加载JS/文档)要加载一组帧,它会将当前帧渲染为<画布>,或在传统浏览器上的图像元素上切换display:none和display:block。

IE8之所以会产生问题,是因为它不想在调用dispose方法时从这些帧中释放内存。(注意:只有当图像位于DOM中时才会发生这种情况,否则一切正常。)

完整的来源可以在这里找到:http://patie.org/8061442

图像被添加到第201行的DOM中:

var i=0,img,node=self$节点[0];对于(;i<self.imageSet.length;i+=1){img=self.queue_loadedResults[self.imageSet[i]]img.setAttribute(“可拖动”,“假”)img.style.display=“无”node.appendChild(img)img=空}i=节点=空

如果删除此代码(以及此处附带的处置代码日期:251-259)然后正确地处理图像,只有当元素添加到DOM时才有问题。

如果在dispose失败后调用render方法,经典第0行的堆栈溢出抛出错误。

任何想法/建议都会非常有用。但是,请在建议之前查看代码,所有对图像的引用都已为空,图像加载程序的实例也已被处理,图像元素上没有会创建循环引用的事件侦听器,等等。据我所知,应该释放图像。

  • 我注意到这个帖子很老了,你有没有可能找到一个简单的解决这个问题的方法?我当前的一个项目也出现了同样的错误。 评论 2014年1月21日13:39
  • 我花了很多时间研究解决方案,并得出结论,这是IE8的javascript引擎中的一个错误(在IE9中,这个问题在某种程度上仍然存在),因此没有解决方案。无论您在跟踪引用并使其无效方面做得多么好,问题都会以这种或那种形式持续存在。我的解决方案是将IE8/9中的帧数减半,以保持稳定,但显然,如果需要所有资产,您可能无法在项目中做到这一点。 评论 2014年1月22日10:45
  • 谢谢,我得出了同样的结论,但希望得到一些确认。最后,我只是强迫浏览器每次刷新都重新加载所有内容。Imho,使用IE的人已经习惯了糟糕的结果,所以使缓存的图像失效并不是一个可怕的牺牲。 评论 2014年1月23日0:44

0

重置为默认值

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.