You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Chrome扩展中chrome.webRequest.onCompleted无法检测Messenger的audio_clip.wav请求

问题分析与解决方案

你遇到的核心问题是Chrome扩展(Manifest V3)无法通过chrome.webRequest.onCompleted捕获Facebook Messenger的音频片段请求(含audio_clip.wav),但对话者切换检测功能正常。以下是针对性的排查和修复方案:

1. 修正webRequest监听的参数与过滤规则

Messenger的音频请求通常来自facebook.com域名而非messenger.com,且当前的监听配置可能遗漏了关键过滤条件:

  • 缩小urls范围到Facebook相关域名,减少无效监听
  • 添加请求方法过滤(音频下载多为GET请求)
  • 移除不必要的extraHeaders参数(若无需修改响应头)

修改background.js中的webRequest监听代码:

chrome.webRequest.onCompleted.addListener(
    (details) => {
        console.log("捕获到请求:", details.url); // 调试用,查看是否命中目标请求
        if (details.url.includes('audio_clip.wav')) {
            chrome.tabs.sendMessage(currentTabId, {
                type: 'REQUEST',
                details: details,
            });
        }
    },
    { 
        urls: ['*://*.facebook.com/*'], // 精准匹配Facebook域名
        methods: ['GET'] // 仅监听GET请求
    }
);

2. 确保service worker监听的注册时机

Manifest V3的service worker是事件驱动的,需确保webRequest监听在service worker启动时就完成注册(不要嵌套在其他事件回调中)。你的当前代码已经满足这一点,但需确认:

  • 扩展已重新加载(在chrome://extensions/页面点击"重新加载")
  • service worker未进入休眠状态(可通过扩展管理页的"检查视图"打开service worker控制台,查看是否有报错)

3. 切换监听事件类型尝试

onCompleted事件可能因请求缓存、重定向等原因未触发,可尝试改用onBeforeRequest或onResponseStarted事件,这两个事件在请求生命周期中更早触发,捕获成功率更高:

// 改用onResponseStarted监听请求开始响应时的事件
chrome.webRequest.onResponseStarted.addListener(
    (details) => {
        if (details.url.includes('audio_clip.wav')) {
            chrome.tabs.sendMessage(currentTabId, {
                type: 'REQUEST',
                details: details,
            });
        }
    },
    { 
        urls: ['*://*.facebook.com/*'],
        methods: ['GET']
    }
);

4. 调试与验证方法

  • 打开service worker控制台:进入chrome://extensions/ → 找到你的扩展 → 点击"service worker"下的"检查",查看控制台输出,确认是否有目标请求的日志
  • 检查网络请求详情:在Messenger页面的开发者工具网络面板中,找到audio_clip.wav请求,复制其完整URL,确认是否包含在你的urls过滤规则中
  • 验证权限:确认扩展的host_permissions和permissions已正确生效(扩展管理页的"权限"标签可查看)

5. 额外注意事项

  • 若音频请求是通过fetch API发起的,Manifest V3的webRequest仍可捕获,但需确保请求未被Service Worker缓存拦截
  • 部分音频请求可能带有签名或临时参数,需确保includes('audio_clip.wav')的判断逻辑覆盖实际URL格式

内容的提问来源于stack exchange,提问作者Jakub Bednarski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 12:02:42