sendResponse 等待异步函数和 Promise 解析
问题: 在 Chrome 扩展程序中,内容脚本中的 sendResponse() .js 不会暂停 getThumbnails()
说明: Chrome 的 chrome.runtime.onMessage 事件监听器返回一个布尔值,以指示通道是否应为 sendResponse 保持打开状态。当返回异步函数或 Promise 时,Chrome 会忽略 Promise 并立即关闭通道。
解决方案:使事件监听器与异步函数兼容:
示例:
chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => { if (msg.message === "get_thumbnails") { processMessage(msg).then(sendResponse); return true; // Keep the channel open for sendResponse } }); async function processMessage(msg) { console.log('Processing message', msg); // ... Handle the message processing here ... return 'foo'; }
替代解决方案:修补 API
将以下代码添加到每个使用的脚本的开头chrome.runtime.onMessage:
if ('crbug.com/1185241') { // Replace with a check for Chrome version that fixes the bug const {onMessage} = chrome.runtime, {addListener} = onMessage; onMessage.addListener = fn => addListener.call(onMessage, (msg, sender, respond) => { const res = fn(msg, sender, respond); if (res instanceof Promise) return !!res.then(respond, console.error); if (res !== undefined) respond(res); }); }
此补丁允许事件监听器返回异步函数或 Promise。
以上是如何让'sendResponse”等待 Chrome 扩展中的异步函数?的详细内容。更多信息请关注PHP中文网其他相关文章!