我想知道如何在播放之前检测到没有添加到DOM中的“audio”元素。创建元素的代码是:
var snd = new Audio("short.mp3");
snd.volume = 1;
snd.play();音频源可能会改变。
稍后,当选择的选项卡可听时,我将使用chrome扩展将一些JS注入页面。然后,代码应该运行并对音频源执行console.log。
如何检查从未添加到DOM中的元素的内容?
PS:我不能改变播放音频的代码。
发布于 2020-12-13 22:40:27
音频编辑:后来发现了这一点:This answer by PhilHoy的功能与我的完全相同,而无需向原型添加其他功能。当我写这篇文章的时候,我对apply还不够熟悉,但是他们的想法是一样的。
详细阐述Daniel Herr的评论:
您可以覆盖音频构造函数
在网上看了一会儿,我找不到比这更好的答案了。你说,"...when所选择的标签是可听到的。然后代码应该运行...“所以我选择改写play方法。从本质上讲,我只是:
使用一个函数保存对原始结果的引用,该函数用于记录
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元素。
可能有更简洁的方法来处理这个问题,但它似乎适用于我的一个用例(在特定的选项卡上添加音量滑块)。
https://stackoverflow.com/questions/41514612
复制相似问题