cross-document-messenger
Version:
post and subscribe messages between documents
37 lines (36 loc) • 1.22 kB
TypeScript
export interface Message<T> {
type: string;
data: T;
}
export interface CrossDocMessenger<T> {
emit: (message: Message<T>) => void;
subscribe: (_handlerFn: (event: Message<T>) => void) => void;
unsubscribe: () => void;
}
interface MessengerConstraint {
messenger<T>(target: HTMLIFrameElement | undefined, targetOrigin: string): CrossDocMessenger<T>;
}
/**
* TargetFrameMessenger is of type: CrossDocMessenger<T>
*/
export declare const TargetFrameMessenger: CrossDocMessenger<unknown>;
/**
* Host document API
*/
export declare class HostConnector implements MessengerConstraint {
private _hostPort;
private _channel;
static getInstance(): HostConnector;
/**
* Should be consumed by the parent/hosting document
* Accepts the iframe target element and its src url, initialize the MessageChannel and returns
* the host and targets ports ready for messaging.
* Example:
* const { hostPort } = CrossDocsMessenger.connectToChannel(iframeRef, targetOrigin);
* @param target
* @param targetOrigin
*/
private _establishChannel;
messenger<T>(target: HTMLIFrameElement | undefined, targetOrigin: string): CrossDocMessenger<T>;
}
export {};