如何使用JS检测任意网站的声音播放并触发自定义代码?
实现网站播放声音时触发自定义提示的JS方案
可以实现,核心是通过拦截网页中音频播放的关键API或事件,来触发自定义逻辑。以下是具体的实现方案:
针对常用音频播放方式的拦截方法
1. 拦截<audio>标签的播放事件
大部分网站会用<audio>标签播放通知音,我们可以重写它的play方法,在音频播放时触发自定义代码:
// 保存原生play方法,避免覆盖后丢失原有功能 const originalAudioPlay = HTMLAudioElement.prototype.play; // 重写play方法 HTMLAudioElement.prototype.play = async function() { // 先执行原生的播放逻辑 const playResult = await originalAudioPlay.apply(this, arguments); // 触发自定义提示逻辑 alert('有声音正在播放'); // 这里可以替换成你需要的自定义代码,比如发送浏览器通知、记录日志等 return playResult; };
2. 处理Web Audio API的播放场景
部分网站会使用Web Audio API播放音频,这种情况下可以拦截音频源节点的start方法:
// 保存原生start方法 const originalSourceStart = AudioBufferSourceNode.prototype.start; // 重写start方法 AudioBufferSourceNode.prototype.start = function() { // 触发自定义提示 alert('有声音正在播放'); // 执行原生的播放启动逻辑 originalSourceStart.apply(this, arguments); };
代码注入方式
- 临时注入:打开浏览器开发者工具(F12)的Console面板,直接粘贴代码回车执行即可生效
- 持久化注入:使用Tampermonkey等脚本管理工具,将代码封装成用户脚本,设置目标网站(比如Facebook)后,打开网站时会自动注入代码
注意事项
- 不同网站的音频实现逻辑可能有差异,比如部分网站会对音频方法做封装或混淆,可能需要针对目标网站调整拦截的API
- 浏览器的隐私或安全策略可能会限制某些操作(比如自动弹出通知需要用户授权)
内容的提问来源于stack exchange,提问作者delphirules
相关产品推荐
相关产品推荐

