首页
学习
活动
专区
工具
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秒,然后在这个定时任务里再去随机获取一个时间,去开启另一个定时任务去执行,这个还没实验,或者你有更好方案可以分享下哟!

30020

你了解 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.

2K50

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.6K10

当creator遇上protobufjs—叛逆成长

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

65330

请求录制 | 巧用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接口用来处理返回值. 两者配合使用也可以达到请求录制功能.

46320

react-native使用cookie

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

3K00

最新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、

4.9K11

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

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

27811

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 很高兴以后允许一个小,保守执行窗口。

82010

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

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

33510

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

2.9K30
领券