Implement chrome.runtime.onMessage response callback
This commit is contained in:
parent
7cfe1dd0af
commit
01005688b6
2 changed files with 26 additions and 11 deletions
|
@ -170,17 +170,22 @@ ipcMain.on('CHROME_I18N_MANIFEST', function (event, extensionId) {
|
||||||
event.returnValue = manifestMap[extensionId]
|
event.returnValue = manifestMap[extensionId]
|
||||||
})
|
})
|
||||||
|
|
||||||
ipcMain.on('CHROME_RUNTIME_SENDMESSAGE', function (event, extensionId, message) {
|
let resultID = 1
|
||||||
|
ipcMain.on('CHROME_RUNTIME_SENDMESSAGE', function (event, extensionId, message, originResultID) {
|
||||||
const page = backgroundPages[extensionId]
|
const page = backgroundPages[extensionId]
|
||||||
if (!page) {
|
if (!page) {
|
||||||
console.error(`Connect to unknown extension ${extensionId}`)
|
console.error(`Connect to unknown extension ${extensionId}`)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
page.webContents.sendToAll(`CHROME_RUNTIME_ONMESSAGE_${extensionId}`, event.sender.id, message)
|
page.webContents.sendToAll(`CHROME_RUNTIME_ONMESSAGE_${extensionId}`, event.sender.id, message, resultID)
|
||||||
|
ipcMain.once(`CHROME_RUNTIME_ONMESSAGE_RESULT_${resultID}`, (event, result) => {
|
||||||
|
event.sender.send(`CHROME_RUNTIME_SENDMESSAGE_RESULT_${originResultID}`, result)
|
||||||
|
})
|
||||||
|
resultID++
|
||||||
})
|
})
|
||||||
|
|
||||||
ipcMain.on('CHROME_TABS_SEND_MESSAGE', function (event, tabId, extensionId, isBackgroundPage, message) {
|
ipcMain.on('CHROME_TABS_SEND_MESSAGE', function (event, tabId, extensionId, isBackgroundPage, message, originResultID) {
|
||||||
const contents = webContents.fromId(tabId)
|
const contents = webContents.fromId(tabId)
|
||||||
if (!contents) {
|
if (!contents) {
|
||||||
console.error(`Sending message to unknown tab ${tabId}`)
|
console.error(`Sending message to unknown tab ${tabId}`)
|
||||||
|
@ -189,7 +194,11 @@ ipcMain.on('CHROME_TABS_SEND_MESSAGE', function (event, tabId, extensionId, isBa
|
||||||
|
|
||||||
const senderTabId = isBackgroundPage ? null : event.sender.id
|
const senderTabId = isBackgroundPage ? null : event.sender.id
|
||||||
|
|
||||||
contents.sendToAll(`CHROME_RUNTIME_ONMESSAGE_${extensionId}`, senderTabId, message)
|
contents.sendToAll(`CHROME_RUNTIME_ONMESSAGE_${extensionId}`, senderTabId, message, resultID)
|
||||||
|
ipcMain.once(`CHROME_RUNTIME_ONMESSAGE_RESULT_${resultID}`, (event, result) => {
|
||||||
|
event.sender.send(`CHROME_TABS_SEND_MESSAGE_RESULT_${originResultID}`, result)
|
||||||
|
})
|
||||||
|
resultID++
|
||||||
})
|
})
|
||||||
|
|
||||||
ipcMain.on('CHROME_TABS_EXECUTESCRIPT', function (event, requestId, tabId, extensionId, details) {
|
ipcMain.on('CHROME_TABS_EXECUTESCRIPT', function (event, requestId, tabId, extensionId, details) {
|
||||||
|
|
|
@ -59,13 +59,16 @@ class Port {
|
||||||
// Inject chrome API to the |context|
|
// Inject chrome API to the |context|
|
||||||
exports.injectTo = function (extensionId, isBackgroundPage, context) {
|
exports.injectTo = function (extensionId, isBackgroundPage, context) {
|
||||||
const chrome = context.chrome = context.chrome || {}
|
const chrome = context.chrome = context.chrome || {}
|
||||||
|
let originResultID = 1
|
||||||
|
|
||||||
ipcRenderer.on(`CHROME_RUNTIME_ONCONNECT_${extensionId}`, (event, tabId, portId, connectInfo) => {
|
ipcRenderer.on(`CHROME_RUNTIME_ONCONNECT_${extensionId}`, (event, tabId, portId, connectInfo) => {
|
||||||
chrome.runtime.onConnect.emit(new Port(tabId, portId, extensionId, connectInfo.name))
|
chrome.runtime.onConnect.emit(new Port(tabId, portId, extensionId, connectInfo.name))
|
||||||
})
|
})
|
||||||
|
|
||||||
ipcRenderer.on(`CHROME_RUNTIME_ONMESSAGE_${extensionId}`, (event, tabId, message) => {
|
ipcRenderer.on(`CHROME_RUNTIME_ONMESSAGE_${extensionId}`, (event, tabId, message, resultID) => {
|
||||||
chrome.runtime.onMessage.emit(message, new MessageSender(tabId, extensionId))
|
chrome.runtime.onMessage.emit(message, new MessageSender(tabId, extensionId), (messageResult) => {
|
||||||
|
ipcRenderer.send(`CHROME_RUNTIME_ONMESSAGE_RESULT_${resultID}`, messageResult)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
ipcRenderer.on('CHROME_TABS_ONCREATED', (event, tabId) => {
|
ipcRenderer.on('CHROME_TABS_ONCREATED', (event, tabId) => {
|
||||||
|
@ -121,16 +124,18 @@ exports.injectTo = function (extensionId, isBackgroundPage, context) {
|
||||||
} else if (args.length === 2) {
|
} else if (args.length === 2) {
|
||||||
// A case of not provide extension-id: (message, responseCallback)
|
// A case of not provide extension-id: (message, responseCallback)
|
||||||
if (typeof args[1] === 'function') {
|
if (typeof args[1] === 'function') {
|
||||||
console.error('responseCallback is not supported')
|
ipcRenderer.on(`CHROME_RUNTIME_SENDMESSAGE_RESULT_${originResultID}`, (event, result) => args[1](result))
|
||||||
message = args[0]
|
message = args[0]
|
||||||
} else {
|
} else {
|
||||||
[targetExtensionId, message] = args
|
[targetExtensionId, message] = args
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
console.error('options and responseCallback are not supported')
|
console.error('options is not supported')
|
||||||
|
ipcRenderer.on(`CHROME_RUNTIME_SENDMESSAGE_RESULT_${originResultID}`, (event, result) => args[2](result))
|
||||||
}
|
}
|
||||||
|
|
||||||
ipcRenderer.send('CHROME_RUNTIME_SENDMESSAGE', targetExtensionId, message)
|
ipcRenderer.send('CHROME_RUNTIME_SENDMESSAGE', targetExtensionId, message, originResultID)
|
||||||
|
originResultID++
|
||||||
},
|
},
|
||||||
|
|
||||||
onConnect: new Event(),
|
onConnect: new Event(),
|
||||||
|
@ -149,9 +154,10 @@ exports.injectTo = function (extensionId, isBackgroundPage, context) {
|
||||||
|
|
||||||
sendMessage (tabId, message, options, responseCallback) {
|
sendMessage (tabId, message, options, responseCallback) {
|
||||||
if (responseCallback) {
|
if (responseCallback) {
|
||||||
console.error('responseCallback is not supported')
|
ipcRenderer.on(`CHROME_TABS_SEND_MESSAGE_RESULT_${originResultID}`, (event, result) => responseCallback(result))
|
||||||
}
|
}
|
||||||
ipcRenderer.send('CHROME_TABS_SEND_MESSAGE', tabId, extensionId, isBackgroundPage, message)
|
ipcRenderer.send('CHROME_TABS_SEND_MESSAGE', tabId, extensionId, isBackgroundPage, message, originResultID)
|
||||||
|
originResultID++;
|
||||||
},
|
},
|
||||||
|
|
||||||
onUpdated: new Event(),
|
onUpdated: new Event(),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue