javascript - 使用 Promise 从后台脚本返回地图
问题描述
我正在编写网络扩展,我需要从后台脚本中获取地图作为回复。为了使我的扩展与 firefox 和 chrome 兼容,我使用了 Mozilla 的webextension-polyfill。这是一个代码示例:
前端.js:
var sendmsg = browser.runtime.sendMessage(1);
sendmsg.then(
result => { handleResponse(result); },
error => { handleError(error); });
function handleError(e)
{
console.log("ERROR HANDLED: " + e);
}
function handleResponse(result)
{
console.log("map size = " + result.size);
}
背景.js
var maptest = new Map();
browser.runtime.onMessage.addListener(onContentMessage);
function onContentMessage(msg, sender, handleResponse)
{
return new Promise(resolve => {
maptest.clear();
maptest.set("aaa", 1);
resolve(maptest);
});
}
但是,这仅适用于 ff,在任何基于 chromium 的浏览器中,handleResponse 参数是undefined。我已经在没有内容背景消息交换的情况下在 chrome 下测试了 Promises,它正确返回了 map。是 webextension-polyfill 中的问题吗?有人知道如何解决吗?
解决方案
解决方案如下:在后台脚本中,必须将扩展运算符应用于映射对象
push([...maptest]);
它将映射对象转换为 [[key1, value1], [key2, value2], ... ] 数组。该数组可以在内容脚本中接收,并且可以通过以下方式转换回地图对象:
function handleResponse(result)
{
var mapobj = new Map(result);
感谢wOxxOm的解决方案
推荐阅读
- sql - 如果它们存储在数组中,如何获取前 5 个关键字
- batch-file - 如何使用 Dir 命令创建所有子目录中所有文件的 list.txt 文件,其中*不*包含路径名
- javascript - 刷新浏览器后 React-Redux 数据未到达控制台
- kubernetes - 从 Docker Compose 迁移到 Kubernetes,将配置存储在持久卷上
- r - 在 R 可反应嵌套/分组表中提供 GROUP 信息详细信息
- python - 访问 pandas 索引部分中的某个列
- c# - Visual Studio SSIS 项目 - 脚本任务生成错误
- sql-server - 在代理作业中使用 Windows 凭据的 SSIS
- javascript - 为什么我的内容出现在我的应用的屏幕之外?
- python - 熊猫日期条件