aboutsummaryrefslogtreecommitdiff
path: root/src/content/MessageListener.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/content/MessageListener.ts')
-rw-r--r--src/content/MessageListener.ts32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/content/MessageListener.ts b/src/content/MessageListener.ts
new file mode 100644
index 0000000..105d028
--- /dev/null
+++ b/src/content/MessageListener.ts
@@ -0,0 +1,32 @@
+import { Message, valueOf } from '../shared/messages';
+
+export type WebMessageSender = Window | MessagePort | ServiceWorker | null;
+export type WebExtMessageSender = browser.runtime.MessageSender;
+
+export default class MessageListener {
+ onWebMessage(
+ listener: (msg: Message, sender: WebMessageSender) => void,
+ ) {
+ window.addEventListener('message', (event: MessageEvent) => {
+ let sender = event.source;
+ let message = null;
+ try {
+ message = JSON.parse(event.data);
+ } catch (e) {
+ // ignore unexpected message
+ return;
+ }
+ listener(message, sender);
+ });
+ }
+
+ onBackgroundMessage(
+ listener: (msg: Message, sender: WebExtMessageSender) => any,
+ ) {
+ browser.runtime.onMessage.addListener(
+ (msg: any, sender: WebExtMessageSender) => {
+ listener(valueOf(msg), sender);
+ },
+ );
+ }
+}