chrome extension sendmessage async

embedded/2024/12/23 5:23:35/

遇到的问题:
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/embedded/103885.html

相关文章

JAVA安全之Velocity模板注入刨析

文章前言 关于Velocity模板注入注入之前一直缺乏一个系统性的学习和整理,搜索网上大多数类似的内容都是一些关于漏洞利用的复现,而且大多都仅限于Velocity.evaluate的执行,对于载荷的构造以及执行过程并没有详细的流程分析,于是乎…

如何在JPG文件中隐写数据

概述 最近在做资源管理器背景的一个功能时,需要将信息传递到DLL中去, 主要就是传递一些比较简单的参数,包括图片的契合度,透明度之类的。通信方式有多种,毕竟是练手的功能,就想找一些以前没用过的方式。 …

模糊视频一键变清晰,从此告别模糊不清的画质

话不多说,咱们直入主题。你是不是有比较模糊的视频,比如老视频,老电影和监控视频,对了,还有日本土特产(懂的都懂),模糊的视频看起是不是很不舒服,长期久了还会影响视力影…

【iOS端】基于Uniapp跨平台接入即构RTC+相芯美颜

0 Uniapp平台接入完成iOS端的即构RTC相芯美颜 Uniapp最大优势是跨平台,前面介绍了如何在android中接入相芯美颜即构RTC,今天咱们把相同的代码接入到iOS中。按照惯例我们先看最终效果,欢迎大家评论讨论: 1 开发配置准备 iOS开发因…

如何将列表中的数字字符串转化为整数

将列表中的字符串数字转化为整数列表,可以使用列表推导式(List Comprehension)或者map()函数结合int()函数来实现。下面是两种方法的示例: 方法1:列表推导式 列表推导式是一种简洁的构建列表的方法。对于你的需求&am…

vue页面自适应 动态 postcss postcss-pxtorem

vue页面自适应 动态 postcss postcss-pxtorem postcss-pxtorem实现页面自适应1、安装postcss-pxtorem2、根目录创建postcss.config.js,并配置以下内容3、创建rem.js,动态设置root px4、在main.js中引入rem.js5、在main.js中创建全局处理函数px2rem6、对…

架构基础 -- 打点系统之FastAPI、python、grafana、prometheus实现

基于 FastAPI 构建打点上报系统 系统架构概述 本系统使用 FastAPI 构建 RESTful API 服务,用于接收打点数据,并将其格式化为 Prometheus 可理解的指标格式。Prometheus 从 FastAPI 应用中定期拉取数据,并存储这些数据。Grafana 用于可视化 …

Linux学习笔记4 重点!网络排障命令

网络排障命令 命令行下载工具wget wget https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/linux-4.20.17.tar.gz wget https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/linux-4.20.17.tar.gz 限速下载 wget --limit-rate1M https://mirrors.edge.kernel.or…