我想知道我如何能够检测到音频'播放前未添加到DOM的元素。创建元素的代码是:
var snd = new Audio("short.mp3");
snd.volume = 1;
snd.play();
音频源可能会改变。
稍后,当选定的选项卡可以听到时,我会使用chrome扩展名将一些JS注入页面。然后代码应该运行并使用音频源执行console.log。
我如何检查有关此元素的内容从未添加到DOM?
PS:我无法更改播放音频的代码。
答案 0 :(得分:0)
阐述丹尼尔·赫尔的评论:
您可以覆盖音频构造函数
在网上闲逛了一会儿,我找不到比这更好的答案了。你说,“......当所选择的选项卡可闻,然后代码应运行......”,所以我当选覆盖play
方法来代替。本质上,我只是:
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
本身的原型中。这给了我一个this
,它始终引用特定的Audio
对象,所以我可以直接使用this.src
。我敢肯定,只有其他问题可以解决,这仅适用于通过new Audio
创建的音频源,而不适用于嵌入式HTML音频元素。
也许有更清洁的方法来处理此问题,但是它似乎适用于我的一个用例(向特定选项卡添加音量滑块)。