简体   繁体   English

“无效”标签中新创建的音频元素不起作用

[英]Newly created audio element in inactive tab doesnt work

I have web based audio player and want to preload next track while current is playing. 我有基于Web的音频播放器,想在当前播放时预加载下一首曲目。 So I create new audio object prefetch = new Audio(url) and when it is time to switch I just swap current audio with preloaded one and trigger .play() . 因此,我创建了新的音频对象prefetch = new Audio(url) ,当需要切换时,我只是将当前音频与预加载的音频交换并触发.play()

But it doesn't always work when tab is not active. 但是,当选项卡未激活时,它并不总是有效。 Sometimes when it is time to swap I found prefetched object with networkState == 3 (NETWORK_NO_SOURCE) and readyState = 0 (HAVE_NOTHING) . 有时是时候进行交换了,我发现networkState == 3 (NETWORK_NO_SOURCE)readyState = 0 (HAVE_NOTHING)预取对象。

When I switch back to the tab - it immediately starts to playing. 当我切换回标签页时-它立即开始播放。

I beleive it caused by async resource selection algorithm and browser optmiziations, but not sure how to make it work. 我相信它是由异步资源选择算法和浏览器优化引起的,但不确定如何使其工作。

(Mostly reproducible in Safari). (大多数可在Safari中重现)。

It's because browser optimizations. 这是因为浏览器优化。 Browser reduce resources allocated to inactive tab, that's why you JS is working lowly or may not work at all. 浏览器减少了分配给非活动选项卡的资源,这就是为什么JS工作不佳或根本不工作的原因。

You can try using WebWorker ( docs ) that has no limits when tab goes inactive. 您可以尝试使用无限制的WebWorkerdocs ),当Tab处于非活动状态时。

Check this answer too 也检查这个答案

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM