fetch()在Chrome扩展中运行正常 但控制台/代码片段中调用失败
排查优先级从高到低如下:
1. 检查DevTools所属的页面上下文
你遇到的net::ERR_FAILED+请求未发出+stalled状态90%的概率是在Chrome内部页面打开的控制台:
- Chrome限制所有
chrome://前缀的页面(包括新标签页、设置页、扩展管理页等)发起对外网络请求,请求会被内核直接拦截,不会离开本机,自然CloudWatch无日志 - 修复方法:任意打开一个公网可访问的普通网页,在该页面的DevTools控制台/代码片段中运行测试代码即可
2. 检查扩展和普通页面的请求权限差异
Chrome扩展的请求不受普通页面的安全策略限制:
- 只要你在扩展的
manifest.json中配置了对应域名的host_permissions,扩展发起的请求会跳过CORS预检流程,也不受页面源的限制 - 普通页面上下文的请求必须严格遵守CORS规则,你当前Lambda的CORS配置存在冲突:
Access-Control-Allow-Origin: *和Access-Control-Allow-Credentials: true无法同时生效,符合Fetch标准的配置需要把Access-Control-Allow-Origin改为请求发起的具体源,或者关闭Access-Control-Allow-Credentials配置
3. 网络层面排查
- 直接在当前标签页的地址栏输入你请求的URL,确认可以正常拿到返回结果,排除代理、DNS、网络规则拦截的问题
- 打开Chrome的
chrome://net-export/记录请求日志,可查看请求被拦截的具体原因
内容的提问来源于stack exchange,提问作者user2161301
相关产品推荐
相关产品推荐

