mirror of
https://github.com/hensm/fx_cast.git
synced 2026-06-09 17:19:59 +00:00
75 lines
1.8 KiB
TypeScript
75 lines
1.8 KiB
TypeScript
"use strict";
|
|
|
|
import { Message } from "../types";
|
|
|
|
|
|
type ListenerFunc = (message: Message) => void;
|
|
|
|
export interface ListenerObject {
|
|
disconnect (): void;
|
|
}
|
|
|
|
|
|
export function onMessage (listener: ListenerFunc): ListenerObject {
|
|
function on__castMessage (ev: CustomEvent) {
|
|
listener(JSON.parse(ev.detail));
|
|
|
|
/**
|
|
* TODO:
|
|
* Figure out a way to handle and stop propagation of this
|
|
* event to hide it from page scripts.
|
|
* Currently the event handler is set after the page loads the
|
|
* cast API, allowing pages set handlers before this script,
|
|
* intercept the event, and cancel it.
|
|
*/
|
|
ev.stopPropagation();
|
|
}
|
|
|
|
document.addEventListener(
|
|
"__castMessage"
|
|
, on__castMessage, true);
|
|
|
|
return {
|
|
disconnect () {
|
|
document.removeEventListener(
|
|
"__castMessage"
|
|
, on__castMessage, true);
|
|
}
|
|
};
|
|
}
|
|
|
|
export function sendMessageResponse (message: Message) {
|
|
const event = new CustomEvent("__castMessageResponse", {
|
|
detail: JSON.stringify(message)
|
|
});
|
|
|
|
document.dispatchEvent(event);
|
|
}
|
|
|
|
|
|
export function onMessageResponse (listener: ListenerFunc): ListenerObject {
|
|
function on__castMessageResponse (ev: CustomEvent) {
|
|
listener(JSON.parse(ev.detail));
|
|
}
|
|
|
|
document.addEventListener(
|
|
"__castMessageResponse"
|
|
, on__castMessageResponse, true);
|
|
|
|
return {
|
|
disconnect () {
|
|
document.removeEventListener(
|
|
"__castMessageResponse"
|
|
, on__castMessageResponse, true);
|
|
}
|
|
};
|
|
}
|
|
|
|
export function sendMessage (message: Message) {
|
|
const event = new CustomEvent("__castMessage", {
|
|
detail: JSON.stringify(message)
|
|
});
|
|
|
|
document.dispatchEvent(event);
|
|
}
|