首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检测未添加到DOM的音频元素

检测未添加到DOM的音频元素
EN

Stack Overflow用户
提问于 2017-01-07 05:26:16
回答 1查看 327关注 0票数 4

我想知道如何在播放之前检测到没有添加到DOM中的“audio”元素。创建元素的代码是:

代码语言:javascript
复制
var snd = new Audio("short.mp3");
snd.volume = 1;
snd.play();

音频源可能会改变。

稍后,当选择的选项卡可听时,我将使用chrome扩展将一些JS注入页面。然后,代码应该运行并对音频源执行console.log。

如何检查从未添加到DOM中的元素的内容?

PS:我不能改变播放音频的代码。

EN

回答 1

Stack Overflow用户

发布于 2020-12-13 22:40:27

音频编辑:后来发现了这一点:This answer by PhilHoy的功能与我的完全相同,而无需向原型添加其他功能。当我写这篇文章的时候,我对apply还不够熟悉,但是他们的想法是一样的。

详细阐述Daniel Herr的评论:

您可以覆盖音频构造函数

在网上看了一会儿,我找不到比这更好的答案了。你说,"...when所选择的标签是可听到的。然后代码应该运行...“所以我选择改写play方法。从本质上讲,我只是:

使用一个函数保存对原始结果的引用,该函数用于记录

  • 调用保存的引用,并将任何结果传递给arguments
  • Returning

代码语言:javascript
复制
Audio.prototype.overwrite_play = Audio.prototype.play

Audio.prototype.play = function() { 
  console.log(this.src)
  return this.overwrite_play(arguments); 
}

如果将play赋值给任意变量,则会得到以下错误:'play' called on an object that does not implement interface HTMLMediaElement.

因此,我选择将overwrite_play方法添加到Audio本身的原型中。这给了我一个引用特定Audio对象的this,所以我可以直接使用this.src。唯一需要注意的是,我敢肯定这只适用于通过new Audio创建的音频源&不适用于嵌入的HTML audio元素。

可能有更简洁的方法来处理这个问题,但它似乎适用于我的一个用例(在特定的选项卡上添加音量滑块)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41514612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档