# messageEvent
**Repository Path**: k-tools/message-event
## Basic Information
- **Project Name**: messageEvent
- **Description**: 页面通信
- **Primary Language**: TypeScript
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2023-02-21
- **Last Updated**: 2024-01-15
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# ue-web-message-event
# 介绍
## UE虚拟引擎和web页面之间通信
# 场景一:
## 默认UE -- webUI 直接加载的页面
| 方法 | 参数 | 描述 |
| ----------- | ----------- |----------- |
| ueWebInstall | @funcName ue场景触发的事件
@emitFuncName ue场景触发事件之后,web端监听的函数名,如果不传递默认取第一个参数场景方法名 | 全局注册ue场景可触发事件,通过EventEmitter - on 监听第二个参数名的回调 |
| ueWebEmit | @funcName 传递给ue场景的方法名
@data 传递可以通过json序列化的数据 | 主动触发场景某事件回调事件 |
| EventEmitter | .on - eventName: string, callback: (msg: string) => void
.emit - eventName: string, msg: string
.off - eventName: string, callback: (msg: string) => void | 事件通信发射器 |
# 场景二: UE加载模板页面,模板页面里面嵌套iframe模块 -- 便于动态切换多页面场景
## 主页面创建通信通道和事件派发
## 实例 MediumPort,在父级页面(默认加载的模板页面),即在ue中加载的主页面
| 方法 | 参数 | 描述 |
| ----------- | ----------- |----------- |
| init | | 在主页面入口初始化通信通道,返回通道之一> |
| set | data: any | 便捷方法,传递数据,也可手动通过messagePort对象直接postMessage |
| get | cb: (data: any, event: MessageEvent) => void | 通过messagePort监听message,单次触发|
| getPort | | 获取port对象,返回Promise |
```
import { MediumPort, ueWebInstall, EventEmitter } from 'ue-web-message-event'
const mediumPort = new MediumPort();
mediumPort.getPort().then(port => {
console.log(port)
if (port) {
mediumPort.set('123123');
mediumPort.get(v => {
console.log(v);
})
mediumPort.get(v => {
console.log(v);
const { type, data } = v;
switch (type) {
case 'INSTALL_GLOBAL_EVENT':
ueWebInstall(data.eventName, data.emitName);
EventEmitter.on(data.emitName, v => {
console.log(v)
})
break;
default:
break;
}
});
}
})
```
## iframe嵌套 -- 通信
## 实例 ChannelPort,在子页面初始化,即ue中加载的主页面中的iframe页面
| 方法 | 参数 | 描述 |
| ----------- | ----------- |----------- |
| init | | 在子页面入口初始化通信通道,返回通道之一 |
| set | data: any | 便捷方法,传递数据,也可手动通过messagePort对象直接postMessage |
| get | cb: (data: any, event: MessageEvent) => void | 通过messagePort监听message,单次触发|
| getPort | | 获取port对象|
```
import { ChannelPort } from 'ue-web-message-event'
const channelPort = new ChannelPort();
channelPort.set('123123');
channelPort.set({
type: 'INSTALL_GLOBAL_EVENT',
data: {
eventName: 'global_ue_panel_visible',
emitName: 'panel_visible'
}
});
channelPort.get(v => {
console.log(v);
})
```