我有一个带有div的HTML页面,其中包含一个HTMLVideo element
,10秒后,我删除视频和附加到它的所有事件,
删除视频时,我在视频元素上使用了jQuery
.remove()
。删除视频后,div元素将明显没有子节点。
几秒钟后(大约5秒),我再次通过创建视频元素和所有源来启动视频,然后将其附加到同一个div中。这是一个循环。
这将工作约5-10分钟。在那之后,我注意到视频不再播放了。我在开发工具中检查了DOM Element
,视频中有正确的url
。
当我检查“网络”选项卡时,它仍然在请求视频。当视频播放时,它具有"GET"
状态,响应为"206 partial content"
。但是,当它不再播放时,它只响应"(pending)"
,当我在一个新的选项卡中直接访问视频url
时,如果没有失败,加载视频需要一些时间。但是如果我在其他浏览器(IE/FF)中访问它,视频URL
将立即加载视频。
我使用
我不知道这是怎么回事,但我认为这是Chrome问题?有人能帮我吗?
发布于 2015-04-08 14:43:54
我怀疑这里发生的事情是,您删除的视频元素仍然在内存中,并试图下载。一旦视频不再附加到DOM上,浏览器就不会停止缓冲甚至播放视频,因为以后可能会再次使用它,或者将它用于画布或Web等其他事情。Chrome一次只能下载这么多流,然后才开始屏蔽新的流。
要真正摆脱旧的视频元素,需要将src
设置为空字符串,然后调用.load()
。这将迫使浏览器停止缓冲该元素,然后您就可以真正使用它了。
或者,您可以重复使用相同的视频元素,并在下一次通过循环在其上设置新的src
(或source
子元素)。只要当您更改.load()
时,请记住在视频元素上调用src
。
理论上,浏览器可以决定停止缓冲没有播放并且内存中没有引用的视频元素,而只是垃圾收集它。但没有看到你的代码,我不能说你周围是否有任何杂乱的引用。有时候Chrome会对这种事情感到奇怪。
https://stackoverflow.com/questions/29515093
复制相似问题