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
相关产品推荐
相关产品推荐

