1. localStorage 事件监听
localStorage.setItem('message', JSON.stringify({
type: 'my-message',
data: 'Hello from Tab 1!',
timestamp: Date.now()
}));
window.addEventListener('storage', (event) => {
if (event.key === 'message') {
const message = JSON.parse(event.newValue);
if (message.type === 'my-message') {
console.log('Received:', message.data);
}
}
});
2. Broadcast Channel API
export const useBroadcastChannel = (channelName = 'message') => {
const channel = new BroadcastChannel(channelName);
const postMessage = ({ type, content }) => {
channel.postMessage({
type,
content,
});
};
const onmessage = (cb) => {
channel.onmessage = (event) => {
cb(event.data);
};
};
return {
postMessage,
onmessage,
};
};
import { useBroadcastChannel } from '@/hooks/useBroadcastChannel'
import { reactive } from 'vue'
const { postMessage } = useBroadcastChannel()
const user = reactive({
name: 'bwf',
age: 18
})
postMessage({
type: "message-user",
content: {...user}
})
postMessage({
type: "message-token",
content: '321123'
})
import {useBroadcastChannel} from '@/hooks/useBroadcastChannel'
const { onmessage } = useBroadcastChannel()
onmessage((data)=>{
console.log('onmessage---data', data);
})