A fork of https://github.com/ueokande/vim-vixen
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
1020 B
40 lines
1020 B
import { METHOD_REQUEST, METHOD_RESPONSE } from '../shared/messages'; |
|
|
|
const sendToBackground = (message) => { |
|
return browser.runtime.sendMessage(message); |
|
}; |
|
|
|
const receiveBackgroundMesssage = (func) => { |
|
return browser.runtime.onMessage.addListener((message) => { |
|
return Promise.resolve(func(message)); |
|
}); |
|
}; |
|
|
|
const receivePageMessage = (func) => { |
|
window.addEventListener('message', (e) => { |
|
let packet = e.data; |
|
if (e.origin !== window.origin || packet.method !== METHOD_REQUEST) { |
|
return; |
|
} |
|
|
|
let resp = { |
|
id: packet.id, |
|
method: METHOD_RESPONSE, |
|
}; |
|
let respMessage = func(packet.message); |
|
if (respMessage instanceof Promise) { |
|
return respMessage.then((data) => { |
|
resp.message = data; |
|
e.source.postMessage(resp, e.origin); |
|
}); |
|
} else if (respMessage) { |
|
resp.message = respMessage; |
|
} |
|
e.source.postMessage(resp, e.origin); |
|
}); |
|
}; |
|
|
|
export { |
|
sendToBackground, receiveBackgroundMesssage, |
|
receivePageMessage, |
|
};
|
|
|