sendResponse 等待非同步函數和Promise 解析
問題: 在Chrome 腳本中,內容腳本中的內容腳本() .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中文網其他相關文章!