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

如何解决Chrome扩展调用TextRazor API时的CORS及请求报错问题

Chrome扩展TextRazor调用问题排查方案

1 Cloudflare Worker代理报错Please specify a TextRazor request.

该报错的核心原因是TextRazor服务未接收到符合格式的请求,可按以下顺序排查:

  • 确认前端发起的请求为POST方法,Content-Type固定为application/x-www-form-urlencoded,请求体必须包含apiKey、extractors两个必填参数
  • 检查Worker转发逻辑,必须完整透传原始请求体,不要做二次序列化/反序列化处理,同时手动覆盖请求头:
    • 将Host设置为api.textrazor.com
    • 删除浏览器自带的Origin、Referer等非必要请求头,避免触发TextRazor的校验规则
  • 可在Worker中增加日志打印转发前的请求参数,和Postman直接调用TextRazor成功的请求参数做比对,确保完全一致

2 chrome.runtime.sendMessage严格模式报错

Chrome扩展的background脚本默认运行在严格模式下,该报错是因为回调中访问了严格模式禁止的caller、callee、arguments属性,修复方案如下:

  • 调整content.js的消息发送逻辑,不要在回调中使用arguments对象,直接显式声明回调参数,示例写法:
// content.js 正确调用示例
chrome.runtime.sendMessage(
  { type: 'fetchTextRazor', content:待分析文本 },
  (result, err) => {
    // 直接使用声明的result、err参数,不要访问arguments对象
    if (result?.entities) {
      // 处理返回的实体数据
    }
  }
)
  • 调整background.js的消息监听逻辑,异步调用接口后调用sendResponse时,必须在监听回调末尾加return true保持消息通道开放,示例写法:
// background.js 正确监听示例
chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
  if (msg.type === 'fetchTextRazor') {
    // 发起跨域请求
    fetch('https://api.textrazor.com/', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/x-www-form-urlencoded',
        'X-TextRazor-Key': '你的TextRazor密钥'
      },
      body: `extractors=entities&text=${encodeURIComponent(msg.content)}`
    }).then(res => res.json()).then(data => {
      sendResponse({ entities: data.response?.entities || [] })
    })
    // 异步返回必须加return true
    return true
  }
})
  • 确认manifest.json中配置了host_permissions,包含https://api.textrazor.com/*权限,否则background发起的请求会被扩展权限拦截

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 17:15:05