Javascript:获取当前播放的 HTMLAudioElement

Posted

技术标签:

【中文标题】Javascript:获取当前播放的 HTMLAudioElement【英文标题】:Javascript : Get the HTMLAudioElement currently playing 【发布时间】:2015-01-23 12:04:46 【问题描述】:

如何在不知道任何内容的情况下访问当前正在播放的htmlAudioElement?它不是页面中的<audio> 标签,而是一个

audio_element = document.createElement('audio');

但是现在(在我希望音频暂停的时候)DOM 已经被修改了

$('#details').html('').load(ajax_loader, "id=" + id, function() 
    <!-- another playlist -->

而且我似乎无法找回我的audio 元素。 它不再在 DOM 中,但音频仍在播放 顺便说一句,女巫很好,但现在我想播放别的东西。当我这样做时,我可以听到两个音频文件。

所以真的我的问题是:我如何才能访问当前正在播放的HTMLAudioElement,而不知道任何

【问题讨论】:

能不能像改成$('#details').html('').load(...这么简单?如果不是,我认为您需要使用更多代码/示例来扩展您的示例 您对 document.all 有什么看法?它是 DOM 中所有元素的伪数组。然后可以关注HTMLAudioElement的paused属性。 你是对的,我的伪代码不是“功能性的”,抱歉。不,一个例子太复杂而无法生成,它不是我的代码,它跨越多个文件,因此我的问题是“理论上的”:我可以在给定点扫描 DOM 并且 获取音频播放的参考,或者我不能(女巫让我感到困惑:这个音频现在在哪里?浏览器是否将它传递给操作系统并且真的失去了它的所有轨道!?) 【参考方案1】:

如果您在创建音频元素时保留对它的引用,您仍然可以通过该引用访问音频元素,然后清除该引用以将其作为垃圾回收。所以一个使用全局变量的简单例子(不是好的做法,但你可以修改它以在你的模块中工作)是:

window.audio_element = document.createElement('audio');

后来

window.audio_element.pause();
window.audio_element = undefined;

这里是 Mozilla 文档 https://developer.mozilla.org/en-US/docs/Web/HTML/Element/audio 和 WhatWG 规范 https://developers.whatwg.org/the-video-element.html#the-video-element 的参考

【讨论】:

感谢您的回答,但遗憾的是,这并没有回答问题。测试它意味着重构整个脚本......如果我保留一个参考,那么我知道一些关于正在播放的音频。 但是如果我用window.audio.element替换所有audio.element,它仍然像以前一样工作,这意味着(在load()之后)window.audio.element.pause() 仍然没有暂停 正在播放的音频,所以显然这个全局变量不是 那个 全局的..? 不要因为你写的代码不能正确清理而生我的气 放轻松 unobf,无论如何感谢您的回答。是的,我确实写了糟糕的代码。 unobf,我对否决您的答案感到难过,尤其是因为您毕竟是对的。请以某种方式对其进行编辑(只需添加一个指向 HTML5 音频参考的链接,类似的东西),这样我就可以使它正确。我的问题解决了。我重新成为一个快乐的人。【参考方案2】:

无法不参考的情况下访问元素。

所以在这种情况下你有两种方法:

在DOM document.body.appendChild(document.createElement('audio')) 中插入音频元素,并通过css display: none; 将其隐藏,然后您可以通过document.getElementsByTagName('audio') 使用get access 在某个范围内保存对音频元素的引用:window.audioElement = document.createElement('audio')

谢谢

【讨论】:

看来你(和下面的 unobf)是对的......我最终将对象存储在 DOM 中......所以这意味着a)浏览器正在播放音频,b)说浏览器几乎无法知道它,更不用说对其采取行动了,可能...只是我,还是安全漏洞? 我认为通常安全性是针对从其他站点加载的内容。无法获取当前正在播放的音频是架构的一个特点。 备注:浏览器确实知道音频元素,只有在网站上执行的javascript代码无法在没有引用的情况下获取该元素。

以上是关于Javascript:获取当前播放的 HTMLAudioElement的主要内容,如果未能解决你的问题,请参考以下文章

获取当前 YouTube 视频时间

Javascript:如何暂停/停止当前播放的音频?

使用当前音频 javascript 创建播放/暂停功能

javascript 当前结束时播放下一个音频

如何使用 Spotify Web API 获取当前播放/最近播放的歌曲

获取AVPlayer ios中视频播放的当前时间