当前位置: 首页 > java >正文

chrome.runtime.sendMessage 和 new FormData()

        chrome.runtime.sendMessage 是Chrome扩展程序API中的一个方法,可用于背景脚本和内容脚本之间的消息传递。

        new FormData() 提供了一种方便的方式来构建表单数据集。

        在Chrome插件中,在 background.js 和 content.js 进行通信时使用了使用new FormData(),结果数据传不过去。

        FormData的数据不能直接查看,需要便利FormData对象中的键值对。

function printFormData(formData) {const result = {};for (const [key, value] of formData.entries()) {if (result[key]) {// 处理重复键(如多文件上传)result[key] = Array.isArray(result[key])? [...result[key], value]: [result[key], value];} else {result[key] = value;}}return result;
}

background.js 和 content.js中代码。

const formData = new FormData()
formData.append('name', 'joe')
formData.append('age', 18)
console.log(formData, 'formData');
console.log(printFormData(formData), 'printFormData(formData)');chrome.runtime.sendMessage({body: formData
}, (response) => {console.log(response);
});

 

        可以看到,代码中先添加了数据,再输出formData,但输出语句没有看到数据,需要遍历键值对查看,将数据通过 sendMessage 进行传递。 

chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {console.log(request.body, 'request.body')console.log(printFormData(request.body), 'printFormData(request.body)')
})

        遍历 request.body 时报不可迭代的错误,说明 request.body 中没有数据。

        这是因为在 chrome.runtime.sendMessage 传递 FormData 时,FormData 不能被序列化为 JSON,而 Chrome 扩展的消息机制会自动尝试序列化消息内容。如果你直接传递 FormData,它会变成一个普通的对象,最终收到的就是 {}。

        所以不能直接传 FormData ,在需要用到 FormData 的页面进行组装。

 

http://www.xdnf.cn/news/10400.html

相关文章:

  • SRD-12VDC-SL-C 继电器‌接线图解
  • golang -- slice 底层逻辑
  • 针对 Harmony-Cordova 性能优化,涵盖原生插件开发、线程管理和资源加载等关键场景
  • 某航后缀混淆逆向与顶像风控分析
  • 第十五章 访问控制
  • DelphiXe12创建DataSnap REST Application
  • 深度学习篇---face-recognition的优劣点
  • 计算机视觉---YOLOv5
  • 多模态大语言模型arxiv论文略读(102)
  • HackMyVM-Jabita
  • AI精准挖掘SEO关键词策略
  • Spring Security安全实践指南
  • 《操作系统真相还原》——进入内核
  • NodeJS全栈开发面试题讲解——P11消息队列(MQ)
  • 杨校老师竞赛课之GESP一级C++[2024-12]真题及题解
  • git 学习
  • Leetcode 3567. Minimum Absolute Difference in Sliding Submatrix
  • Spring Boot 全局配置文件优先级
  • 基于springboot的宠物领养系统
  • 本振相参解析(1)2025.6.1
  • 【华为云Astro】从OBS CSV文件获取配置指南
  • 语音数据处理:ueng 与 ong 的统一表示方案
  • Python数据类型详解:从字符串到布尔值,一网打尽
  • Vue-2-前端框架Vue基础入门之二
  • 从单机到集群,再到分布式,再到微服务
  • 【计算机系统结构】习题2
  • 雪花算法:分布式ID生成的优雅解决方案
  • 【2025.06】jupyter notebook 7+ 新手安装、配置、扩展应用(windows篇)
  • 【配置指南】Dify部署超全配置参考手册
  • 类和对象(4)