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

Chrome扩展V3中MediaError未定义错误的修复方案咨询

Chrome扩展V3:MediaError未定义与请求拦截失效解决方法

解决「MediaError is not defined」错误

Chrome扩展V3的背景脚本运行在Service Worker环境中,该环境不包含DOM API,MediaError属于浏览器DOM对象,因此无法在Service Worker中访问。原代码用它判断Chrome版本的逻辑可以替换为以下两种方案:

  • 直接移除FTP规则:Chrome 59是2017年发布的版本,目前主流Chrome版本早已远超该版本,且Chrome默认已禁用FTP资源加载,完全可以删掉这段条件判断,urls数组仅保留file://相关规则即可。
  • 通过Chrome API获取版本号判断:使用chrome.runtime.getBrowserInfo()获取浏览器版本后再做逻辑判断,示例代码:
    chrome.runtime.getBrowserInfo().then(info => {
      const versionNum = parseInt(info.version.split('.')[0], 10);
      const targetUrls = [
        "file://*/*.pdf",
        "file://*/*.PDF"
      ];
      // 仅在版本低于59时添加FTP规则(实际场景中几乎无需处理)
      if (versionNum < 59) {
        targetUrls.push("ftp://*/*.pdf", "ftp://*/*.PDF");
      }
    
      chrome.webRequest.onBeforeRequest.addListener(
        function (details) {
          if (isPdfDownloadable(details)) {
            return undefined;
          }
          const viewerUrl = getViewerURL(details.url);
          return { redirectUrl: viewerUrl };
        },
        { urls: targetUrls, types: ["main_frame", "sub_frame"] },
        ["blocking"]
      );
    });
    

解决请求拦截未生效的问题

检查以下关键配置与逻辑:

  • Manifest权限配置:确保manifest.json中正确声明必要权限,V3版本需单独配置host_permissions:
    {
      "permissions": ["webRequest", "webRequestBlocking"],
      "host_permissions": ["file:///*", "ftp:///*"],
      "background": {
        "service_worker": "background.js"
      }
    }
    
  • 开启文件URL访问权限:Chrome默认禁止扩展访问file://协议,需手动开启:
    • 打开扩展管理页面(chrome://extensions/)
    • 找到目标扩展,点击「详细信息」
    • 开启「允许访问文件网址」选项
  • 检查Service Worker状态:在chrome://serviceworker-internals/查看你的扩展Service Worker是否正常运行,避免因超时而被终止。
  • 回调逻辑校验:确认isPdfDownloadable(details)函数未误判导致提前返回undefined;getViewerURL(details.url)生成的重定向URL为有效可访问地址。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 02:45:34