我有一个带有div的HTML页面,其中包含HTMLVideo element
,
10秒后,我删除了视频及其附带的所有事件,
删除视频后,我在视频元素上使用了jQuery
.remove()
。
删除视频后,div元素显然没有子节点。
几秒钟后(大约5秒钟),我通过创建视频元素和所有源再次启动视频,然后将其附加到同一个div。这是一个循环。
这将工作约5-10分钟。在那之后,我注意到视频不再播放了。我检查了开发人员工具中的DOM Element
,视频就是正确的url
。
当我检查"网络"选项卡,它仍在请求视频。视频播放时,其状态为"GET"
,响应为"206 partial content"
。但是,当它不再播放时,它只会响应"(pending)"
,而当我在新标签中直接访问视频url
时,如果没有失败则需要一些时间来加载视频。但如果我在其他浏览器(IE / FF)中访问它,视频URL
将立即加载视频。
我使用Google Chrome for Windows
我不知道这里发生了什么,但我认为这是一个Chrome问题?有人能帮助我吗?
答案 0 :(得分:1)
我怀疑这里发生的事情是您删除的视频元素仍在内存中并尝试下载。一旦视频不再附加到DOM,浏览器就不会停止缓冲甚至播放视频,因为您可能会在以后再次使用它或将其用于其他内容,如canvas或Web Audio API。 Chrome可以在开始阻止新流之前立即下载这么多流。
要真正摆脱旧的视频元素,您需要将src
设置为空字符串,然后调用.load()
。这将迫使浏览器停止缓冲该元素,然后您就可以真正完成它。
或者,您可以重复使用相同的视频元素,并在下次循环时在其上设置新的src
(或source
子元素)。只要记得在更改.load()
。
src
理论上,浏览器可以决定停止缓冲未播放的视频元素,并且在内存中没有引用它,只是垃圾收集它。但是没有看到你的代码,我不能说你是否有任何迷路参考。 Chrome有时会对这类事情感到奇怪。