chrome extension sendmessage async

devtools/2024/10/22 16:37:54/

遇到的问题:
Chrome 插件开发,需要实现 content 页面使用 chrome.runtime.sendMessage 发送消息给 background,background 需要异步处理完消息以后再发送处理结果给content 页面。

解决思路和方法:
google 找到的解决方法:
https://stackoverflow.com/questions/14094447/chrome-extension-dealing-with-asynchronous-sendmessage

  • 关键代码(解决我问题的答案,来自链接网页)
javascript">// content.js
chrome.runtime.sendMessage({ type: "GET_FOO" }, function (response) {console.log(response.foo);
});// background.js
// replace with a real call that
// needs to run asynchronously
async function getFoo() {return "bar"
}async function sendFoo(sendResponse) {const foo = await getFoo()sendResponse({ foo })
}chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) {if (request.type === "GET_FOO") {sendFoo(sendResponse)return true}}
);
  • 直接使用到我项目里面时,发现还需要修改(为了方便阅读,我直接在上面的代码中进行修改):代码中 getFoo 函数部分,我需要通过 $.ajax 发送一个异步请求,那么直接用 await getFoo() 就达不到效果,使用 promise 把 getFoo 改造一下就可以了。
javascript">// content.js
chrome.runtime.sendMessage({ type: "GET_FOO" }, function (response) {console.log(response.foo);
});// background.js
//reqParams是请求参数
function getFoo(reqParams) {return new Promise((resolve, reject) => {//模拟发送ajax请求结果if (true) {resolve("success")} else {resolve("fail")}});
}async function sendFoo(sendResponse, reqParams) {const foo = await getFoo(reqParams)sendResponse({ foo })
}chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) {if (request.type === "GET_FOO") {const reqParams = { param1: '1', param2: '2' }sendFoo(sendResponse, reqParams)return true}}
);

这些是解决问题的思路,重点是:

  • chrome.runtime.onMessage.addListener 中 return true
  • 使用JS异步函数技术编写相关代码

http://www.ppmy.cn/devtools/104127.html

相关文章

gitlab SSH的使用

一、 安装git bash https://git-scm.com/download/win 下载windows 版本,默认安装即可。 二、使用命令 打开本地git bash,使用如下命令生成ssh公钥和私钥对 ssh-keygen -t rsa -C ‘xxxxxx.com’ 然后一路回车 (-C 参数是你的邮箱地址) 若是想输入密码可以输入…

从小鹏看自动驾驶发展趋势

 小鹏:端到端大模型量产落地,体验升级成下阶段主线 算法端,小鹏已量产国内首个端到端大模型,其模型采用分段式结构,分为神经网络 XNet、规控大模型 XPlanner 以及大语言模型 XBrain 三部分。数据闭环方面&#xff0…

OpenCV绘图函数(13)绘制多边形函数函数polylines()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 画几条多边形曲线 函数原型 void cv::polylines (InputOutputArray img,InputArrayOfArrays pts,bool isClosed,const Scalar & color…

类图的关联关系

类图关联关系分为单向关联关系,双向关联关系,自关联关系 单向关联关系 是一个类的属性或方法被另外一个类引用,二者之间用一个箭头表示 比如顾客类和地址类,每个顾客都有一个地址 单向关联关系在UML图中两个类之间用单向箭头表…

稚晖君智元机器人远程机器人系列发布:引领具身智能新高度

在最近的发布会上,前华为“天才少年”稚晖君及其团队亮相了他们的最新作品——智元机器人的第二代远程机器人系列。这次发布会不仅展示了丰富的产品线,还揭示了其未来的发展路线以及开源计划。本文将详细解析本次发布会的亮点和技术背后的创新。 一、发…

大模型种草书籍——BERT基础教程:Transformer大模型实战,看完头皮发麻!

《BERT基础教程:Transformer大模型实战》 是一本专注于介绍自然语言处理(NLP)领域的先进技术——BERT(Bidirectional Encoder Representations from Transformers)及其应用的教程书籍。 以下是这本书的简要介绍&#…

PyCharm 自定义字体大小

常用编程软件自定义字体大全首页 文章目录 前言具体操作1. 打开设置对话框2. 设置编辑器字体3. 选择外观字体 前言 PyCharm 自定义字体大小,统一设置为 JetBrains Mono 具体操作 【File】>【Settings...】>【Editor】>【Font】 统一设置为字体样式 JetB…

第十四章 rust集合库介绍

注意 本系列文章已升级、转移至我的自建站点中,本章原文为:rust集合库介绍 目录 注意一、前言二、map三、list四、set五、deque一、前言 基本的数据结构各种语言都会有自己的实现,rust也不例外。 在rust中,这些数据结构的实现被称作“集合”,被放置在了std::colections…