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】:
您无法在不参考的情况下访问元素。
所以在这种情况下你有两种方法:
在DOMdocument.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的主要内容,如果未能解决你的问题,请参考以下文章