js-broadcast-channel
Version:
115 lines (81 loc) • 2.9 kB
Markdown
# js-broadcast-channel
A lightweight TypeScript library for cross-tab communication using the BroadcastChannel API. This package provides a simple interface for sending and receiving messages between different browser tabs or windows.
## Installation
npm install js-broadcast-channel
## Features
- 🚀 Simple and intuitive API
- 📦 TypeScript support out of the box
- 🔄 Cross-tab communication
- 🎯 Message-specific callbacks
- ⚡ Lightweight with zero dependencies
- 🎭 Built-in message handlers and lifecycle hooks
## Usage
### Basic Usage
```typescript
import { BroadcastJS } from 'js-broadcast-channel';
// Initialize BroadcastJS with a channel name
const broadcast = new BroadcastJS('my-channel');
// Send a message
broadcast.postMessage({
message: 'update-count',
data: { count: 42 }
});
// Listen for messages
broadcast.onMessage('update-count', (message) => {
console.log('Received count:', message.data.count);
});
```
## API Reference
### Constructor
```typescript
new BroadcastJS(name: string, handlers?: BroadcastHandlers)
```
#### Handlers (Optional)
- `onBeforeSendMessage`: Called before a message is sent
- `onAfterSendMessage`: Called after a message is sent
- `onBeforePostMessage`: Called before posting a message
- `onAfterPostMessage`: Called after posting a message
- `onBeforeClose`: Called before closing the channel
- `onAfterClose`: Called after closing the channel
- `onError`: Called when an error occurs
### Methods
#### `postMessage(message: Message)`
Sends a message to all other tabs/windows listening on the same channel.
```typescript
interface Message<T = unknown> {
message: string;
data: T;
}
```
#### `onMessage<T>(messageName: string, callback: (message: Message<T>) => void)`
Registers a callback for a specific message type.
#### `close()`
Closes the broadcast channel and cleans up resources.
#### `hasListeners(messageName: string)`
Checks if there are any listeners for a specific message.
#### `canBrowserSupportBroadcastJS()`
Checks if the browser supports the BroadcastChannel API.
#### `removeMessage(messageName: string)`
Removes a message listener.
## Example with Handlers
```typescript
const broadcast = new BroadcastJS('my-channel', {
onBeforeSendMessage: (message) => {
console.log('About to send:', message);
},
onAfterSendMessage: (message) => {
console.log('Message sent:', message);
},
onError: (message) => {
console.error('Error processing message:', message);
}
});
```
## Browser Support
This package requires browser support for the BroadcastChannel API. Check [Can I Use](https://caniuse.com/?search=broadcastchannel) for browser compatibility.
## Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
## License
ISC
## Author
Alireza Valipour