Firefox扩展跨域XMLHttpRequest异常求助(Chrome正常)
解决Firefox扩展跨域XHR请求返回状态0的问题
我帮你梳理下这个问题的解决方案哈,Firefox里出现状态0的跨域请求失败,核心原因是扩展跨域权限的配置逻辑和Chrome不一样——你在content_scripts里加的matches只是控制脚本能注入到哪些页面,并不负责授予跨域请求的权限。下面是具体的解决步骤:
1. 补充扩展清单的跨域权限配置
根据你使用的Manifest版本(V2或V3),需要在manifest.json里添加对应的权限声明:
如果你用的是Manifest V2
在清单中添加permissions字段,包含目标域名:
{ "manifest_version": 2, "content_scripts": [ { "matches": ["*://*.domain1.com/*", "*://*.domain2.com/*"], "js": ["你的内容脚本文件名.js"] } ], "permissions": [ "*://*.domain1.com/*", "*://*.domain2.com/*" ] }
如果你用的是Manifest V3
Manifest V3用host_permissions替代了部分跨域权限的声明,所以要添加这个字段:
{ "manifest_version": 3, "content_scripts": [ { "matches": ["*://*.domain1.com/*", "*://*.domain2.com/*"], "js": ["你的内容脚本文件名.js"] } ], "host_permissions": [ "*://*.domain1.com/*", "*://*.domain2.com/*" ] }
2. 验证请求URL的完整性
确保theUrl是带完整协议(http/https)的绝对URL,比如https://domain1.com/api/get-data,不要使用相对路径或不带协议的地址——Firefox对URL格式的校验比Chrome更严格,不规范的URL也可能导致请求失败。
3. 检查Firefox隐私设置(可选)
如果你的Firefox开启了增强跟踪保护的严格模式,可能会拦截跨域请求。可以临时切换到标准模式测试:
- 打开Firefox设置 → 隐私与安全 → 增强跟踪保护 → 选择“标准”模式
- 重新加载扩展和目标页面,查看请求是否恢复正常
Chrome在部分场景下对扩展跨域权限的校验更宽松,但Firefox严格遵循扩展权限规则,必须显式声明跨域权限才能发起跨域请求。按照上面的步骤配置后,应该就能解决状态0的问题啦。
内容的提问来源于stack exchange,提问作者brouille
相关产品推荐
相关产品推荐

