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

开发火狐扩展遇问题:后台加载Glosbe脚本失败,CSP阻止资源加载

解决Firefox扩展中Glosbe脚本加载失败与CSP拦截问题

看起来你遇到了Firefox扩展里CSP(内容安全策略)拦截外部资源的典型问题——根源是你的扩展尝试用JSONP方式加载Glosbe的翻译API,但Firefox扩展的默认CSP规则非常严格,不允许加载未授权的外部脚本。下面是针对性的解决方案:

核心问题分析

你看到的两个错误是关联的:

  • 脚本加载失败是因为CSP直接阻止了<script>标签加载Glosbe的JSONP资源
  • JSONP本质是通过动态插入外部脚本实现跨域,而扩展的CSP默认只允许加载自身的脚本资源

推荐解决方案:改用扩展跨域AJAX请求(替代JSONP)

Firefox扩展天生拥有跨域请求的权限(只要在manifest中配置),完全不需要依赖JSONP这种hack方式。步骤如下:

1. 配置manifest权限

在manifest.json的permissions数组中添加Glosbe的域名,允许扩展向该域名发送请求:

{
  "manifest_version": 2, // 或 3,根据你的版本调整
  "permissions": [
    "https://glosbe.com/*"
    // 其他已有的权限...
  ]
}

2. 替换JSONP为标准AJAX请求

把原来的jQuery JSONP调用改成fetch或XMLHttpRequest,直接请求JSON数据(去掉callback参数,因为不需要JSONP的回调机制了):

// 替换原来的jQuery JSONP代码
fetch('https://glosbe.com/gapi/translate?from=&dest=&format=json&phrase=fa%20')
  .then(response => {
    if (!response.ok) throw new Error('请求失败');
    return response.json();
  })
  .then(data => {
    // 这里处理返回的翻译数据
    console.log('翻译结果:', data);
  })
  .catch(error => {
    console.error('请求出错:', error);
  });

备选方案:如果必须保留JSONP(仅适用于Manifest V2)

如果你因为某些原因必须继续使用JSONP,只能在Manifest V2中调整CSP规则(Manifest V3不允许添加外部脚本源,官方已废弃这种做法):

在manifest.json中添加content_security_policy字段,明确允许加载Glosbe的脚本:

{
  "manifest_version": 2,
  "content_security_policy": "script-src 'self' https://glosbe.com; object-src 'self'"
  // 其他配置...
}

⚠️ 注意:这种方式会降低扩展的安全性,只在万不得已时使用,Manifest V3完全不支持这种配置。


额外排查要点

  • 确认你的manifest.json中permissions确实包含了https://glosbe.com/*,否则即使改用AJAX也会被跨域规则拦截
  • 如果是在内容脚本中发起请求,内容脚本的CSP受宿主页面影响,此时建议把请求逻辑移到background.js中(后台脚本不受宿主页面CSP限制)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:49:51