首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我的fetch body在Google Chrome扩展中总是返回null

在Google Chrome扩展中,当使用fetch API发送请求时,如果请求的body参数为null,那么fetch函数返回的response对象的body属性也会为null。这是因为在Chrome扩展中,fetch API默认不允许发送包含body的请求,除非在manifest.json文件中的permissions字段中明确声明了需要访问请求body的权限。

要解决这个问题,你可以按照以下步骤进行操作:

  1. 在你的Chrome扩展的manifest.json文件中,确保已经添加了访问请求body的权限。例如,如果你的扩展需要发送POST请求并包含请求body,你需要在permissions字段中添加"webRequest"和"webRequestBlocking"权限,并在"optional_permissions"字段中添加"http:///"或"https:///",以允许访问所有网站的请求body。

示例:

代码语言:txt
复制
{
  "manifest_version": 2,
  "name": "My Extension",
  "version": "1.0",
  "permissions": [
    "webRequest",
    "webRequestBlocking",
    "http://*/",
    "https://*/"
  ],
  "optional_permissions": [
    "http://*/",
    "https://*/"
  ],
  "background": {
    "scripts": ["background.js"],
    "persistent": false
  },
  "browser_action": {
    "default_popup": "popup.html",
    "default_icon": "icon.png"
  },
  "content_scripts": [
    {
      "matches": ["http://*/*", "https://*/*"],
      "js": ["content.js"]
    }
  ]
}
  1. 确保你的fetch请求中正确设置了请求的body参数。你可以使用FormData对象来构建请求的body数据,并将其作为fetch函数的第二个参数传递。

示例:

代码语言:txt
复制
const formData = new FormData();
formData.append('key1', 'value1');
formData.append('key2', 'value2');

fetch('https://example.com/api', {
  method: 'POST',
  body: formData
})
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
  1. 如果你仍然遇到问题,可以尝试在fetch请求中添加合适的请求头,例如Content-Type。根据你发送的请求数据类型,选择合适的Content-Type值。

示例:

代码语言:txt
复制
fetch('https://example.com/api', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({ key1: 'value1', key2: 'value2' })
})
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));

通过以上步骤,你应该能够解决在Google Chrome扩展中fetch body返回null的问题,并成功获取到请求的body数据。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

简单实用node脚本:通过定时任务和2个fetch请求实现网站自动签到功能

签到接口,发起网络请求实现签到 下方示例采用了第二种接口签到方式,一般我们只需要先分析登录接口,拿到登录态,如果是直接返回的 token 那就更简单了,也有的网站会自动通过 cookie 设置登录态,拿到登录态我们再带上登录态去请求签到接口就可以了...实现步骤 1、分析登录接口,拿到登录态参数 输入账号密码登录后,发现登录接口 Response 里并没有数据返回,然后看 Headers 里的 Response Headers 里的 Set-Cookies...":null, "method":"POST" }) if(res.status !...即使用 pm2 启动服务也不会执行的,只能设置让电脑从不睡眠了,或者有服务器的部署在自己的服务器上跑。...点0分0秒,然后在这个定时任务里再去随机获取一个时间,去开启另一个定时任务去执行,这个我还没实验,或者你有更好的方案可以分享下哟!

50620
  • 你了解 Cache-Control 作为请求头是什么意思吗?

    Cache-Control: max-age=0 作为请求头,将会验证服务器资源的新鲜度,如果缓存未过期,则利用缓存,返回 304 状态码,否则重新获取资源返回 200 状态码。...通过使用 fetch 发送请求,并通过 headers 控制请求头 cache-control,在控制台中进行测试,并在网络面板检测网络状况。...sec-ch-ua": "\"Chromium\";v=\"104\", \" Not A;Brand\";v=\"99\", \"Google Chrome\";v=\"104\"", "sec-ch-ua-mobile...浏览器中关于缓存的控制 :正常重新加载。实际上的实现是每次发送请求携带 Cache-Control: max-age=0 头部。 :硬性重新加载。...实际上的实现是每次发送请求携带 Cache-Control: no-cache 头部。 3. 实例 我在 Apifox2 中演示了知名网站关于重定向的实例。见文档3。 图片 4.

    3.1K50

    Asp.net Core 经过nginx代理后获取不到真实ip和scheme的问题

    背景 我最近在一个Asp.net core Web 程序在经过nginx代理后 ,总是获取不到用户真实i和scheme(HttpContext.Request.Scheme),挠头; 我们一般从请求头获取用户...ip:(我就用的这种 context.Request.Headers["X-Forwarded-For"] 当然这个时候要去你nginx要配置了 X-Forwarded-For 我们也可以用Forwarded...,但是Forwarded Headers Middleware 以上的这两步配置我都配置了。...options.KnownNetworks.Clear(); options.KnownProxies.Clear(); //可以自定义这个头防止伪造X-Forwarded-For攻击,不过我觉得在第一层...Loopback 地址转发请求的,一定要加上 options.KnownNetworks.Clear 与 options.KnownProxies.Clear 的 下面我获取下加了 options.KnownNetworks.Clear

    1.7K10

    当creator遇上protobufjs—叛逆成长

    在iOS/Mac平台使用Safari浏览器,Android/Windows可使用Chrome及Chrome的衍生调试工具。 ?...调试require函数 通过Safari的断点追踪,找到有一行protobufjs中的关键代码,require('fs')的返回值为undefined,请看下面代码 ?...通过这个nameMap我明白了为什么在Creator中可以直接require('文件名'),而不需要完整路径,同时也明白了为什么js文件不能同名的原因。...不论是Web\iOS\Android所有平台的文件加载都可以用cc.loader.loadRes搞定,比protobufjs中实现的fetch都简单多了,cc.loader.loadRes为我提供了一盏明灯...当知道这种思考解决问题的方法时,我立刻就想起解决protobufjs在creator1.7模拟器上的问题,当时我不正是用的这种解决问题的吗?

    68030

    请求录制 | 巧用filter

    GET把参数包含在URL中, POST通过request body传递参数.是需要两种不同的参数解析方式. 2.1 GET参数解析 GET方式下的参数解析有原生的API, 只需要调用request.getParameterNames..., POST方式的参数是存放在消息主体(entity-body)中的, 服务端会根据请求头(headers)中的Content-Type字段来获知请求中编码方式, 并进行解析....对于消息主体(entity-body)中的内容, 是需要使用流的方式进行接收解析, 但是, 也就意味着数据只能用一次, 后面的servlet就接收不到数据了....在SpringV4.2版本中利用AOP机制新加了RequestBodyAdvice接口用来处理@RequestBody或HttpEntit封装的参数, 但也意味着不能处理GET方式参数....类似的, 在SpringV4.1版本中增加了ResponseBodyAdvice接口用来处理返回值. 两者配合使用也可以达到请求录制的功能.

    48920

    react-native使用cookie

    在这一个系统中,爬虫服务器担当大任。...当客户端传输登录的帐号密码的时候,爬虫服务器进行模拟登录,并保存cookie在缓存中,生成一个token返回给app; app此后凭借token向爬虫服务器请求信息,爬虫服务器根据token选取cookie...但是,手机客户端本来就是一个具有很强处理能力的终端,为什么要把这个工作屈身在一个服务器上呢。应该让每一个客户端做处理,拜托爬虫服务器才对啊 尝试cookie 于是我在手机程序上开始做尝试。...但是react native毕竟是js转android(或iOS),谁知道在转化过程有没有做处理了。google一番得到模棱两可的说法。看来还是得试验一番。...改写程序 react native进行网络请求的函数是fetch,会自动保存网络请求的cookie,不需要自己做任何的程序处理,就像平时用浏览器上网一样简单。

    3.1K00

    最新Tampermonkey 中文文档解析(附基础案例和高级案例)

    另外在脚本中添加“@connect*”。通过这样做,tampermonkey仍然会询问用户是否允许下一个连接到未提及的域,但也会提供一个“总是允许所有域”按钮。...,tm试图通过查找@match标记来检测脚本是否是在google chrome/chromium的知识中编写的,但并不是每个脚本都使用它。...这就是为什么tm支持这个标签来禁用运行为firefox/greasemonkey编写的脚本所需的所有优化。要保持此标记可扩展,可以添加可由脚本处理的浏览器名称。...,并返回监听id ‘name’是被观察的变量 回调函数的‘remote’变量是显示此值是从另一个选项卡的实例修改的(true)还是在此脚本实例中修改的(false)。...type anonymous 在请求中不需要发送cookies,详细请看fetch 注释 fetch (beta) 使用一个fetch来代替xhr请求, 在chrome中,这会导致xhr.abort、

    5.5K11

    写html页面没意思,来挑战chrome插件开发

    谷歌浏览器插件开发是指开发可以在谷歌浏览器中运行的扩展程序,可以为用户提供额外的功能和定制化的体验。谷歌浏览器插件通常由HTML、CSS和JavaScript组成,非常利于前端开发者。...开发者可以利用这些技术在浏览器中添加新的功能、修改现有功能或者与网页进行交互。...动态配置注入 在特定时刻才进行注入,比如点击了某个按钮,或者指定的时刻 需要在popup.js或background.js中执行注入的代码。...通过这些方法,您可以从内容脚本向扩展程序发送一次性 JSON 可序列化消息,或者从扩展程序向内容脚本发送。如需处理响应,请使用返回的 promise。...}) 然后就可以在content.js或popup.js中获取到数据 // 这里的参数是,获取不到数据时的默认参数 chrome.storage.sync.get({color: 'yellow'},

    42811

    W3C TPAC 大会上的 Service workers 内容总结

    但是在规范中有一个地方讲到:如果一个名为 serviceWorker.register() 的页面具有相同的作用域,则被注销的 service worker 注册将会“复苏”。我不知道为什么要这么做。...我们在 2018 年就此达成了共识,并已在 Chrome 中实现,同时在 Firefox 和 Safari 中也已经实现。...这项小功能已在所有浏览器中达成共识,在 Chrome 中正在积极开发。...大多数浏览器中已经存在了许多年,这是 Chrome 的最新版本(https://developers.google.com/web/updates/2019/02/back-forward-cache)...由于用户已经作为顶级页面访问了该网站(例如原始位置在URL栏中,而不是 iframe),因此 Chrome 很高兴在以后允许一个小的,保守的执行窗口。

    84810

    我教你写脚本,一页展示所有数据

    我们在阅读表格时,可能有这种困惑: 表格不支持关键词搜索 表格不支持按照某列排序 表格每页只能展示10条数据,需要不断翻页,才能看完所有内容 怎么办呢? 如果表格一页能展示所有数据就好了!...我要让前端的掘金代码请求时,只请求1次,就获得所有的数据。这样可以一次性展示。...解决第1个问题:获取所有数据 我们打开浏览器的开发者工具,打开Network(网络)面板,发现了这个叫做list_by_user的API,返回了表格的所需数据。...Chrome最方便的一点是,可以直接Copy as fetch,点击后,就可以复制这个请求的fetch版本,做「重放攻击」也太方便啦,Chrome的贴心功能真是太刑啦! ​...这个API的返回结果是这样的: ​编辑 我们最终目的是,把data里的数据都整合进同一个数组中。

    37510

    Google SEO教程之Google Indexing API第一时间抓取新页面

    2 获取indexing API的私钥文件(json格式) 3 记录Service account邮箱账号 4 在站点设置中给予Service account账号相应权限 5 调用...Indexing功能停用 中,我们提到 2020年10月14日,Google暂停了Request Indexing 功能,中心君还提到过,会告诉大家相应的解决办法 - 使用Google Indexing...记录Service account邮箱账号 在Google服务帐号页面找到Service account邮箱账号(Email for Service account) in Google Cloud:...在站点设置中给予Service account账号相应权限 Google Search Console: image.png image.png image.png 如果不设置这一步,运行后文中的...= 'http://10.179.8.31:9090'; 当然,你如果在浏览器中使用且能访问Google (比如,可以用Chrome上网助手 - 插件),可以直接用 Repl.it 运行你的nodejs

    3.1K30
    领券