使用 qiankun 来进行子应用拆分的时候遇到了以下问题 因为子应用是一个原生的 html 项目,所以有很多挂载在 window 上的属性以及方法 其中有一个鼠标事件处理的问题
propagateMouseEventToCanvas(event) {
if (!event.isSimulated) {
console.log(window ,'-------------------------------');
const eventType = event.type;
// Create and dispatch a simulated event to the canvas
const simulatedEvent = new MouseEvent(eventType, {
clientX: event.clientX,
clientY: event.clientY,
screenX: event.screenX,
screenY: event.screenY,
button: event.button,
buttons: event.buttons,
ctrlKey: event.ctrlKey,
shiftKey: event.shiftKey,
altKey: event.altKey,
metaKey: event.metaKey,
relatedTarget: event.relatedTarget,
bubbles: true,
cancelable: true,
view: window
});
simulatedEvent.isSimulated = true; // Custom property to mark the event as simulated
this._canvas.dispatchEvent(simulatedEvent);
}
}
btnsWrapper.addEventListener('mousemove', this.scene.propagateMouseEventToCanvas.bind(this.scene));
btnsWrapper.addEventListener('mousedown', this.scene.propagateMouseEventToCanvas.bind(this.scene));
btnsWrapper.addEventListener('mouseup', this.scene.propagateMouseEventToCanvas.bind(this.scene));
打印的时候发现 window 为一个 proxy Object 并且控制台报错了
helpers.ts:122 Uncaught TypeError: Failed to construct 'MouseEvent': Failed to read the 'view' property from 'UIEventInit': Failed to convert value to 'Window'.
按 gpt 改成 globalThis 也无法解决,不是很理解报错的原因以及解决方案,有没有大佬赐教一下
1
jydeng 72 天前
是不是要关闭 qiankun 的 js 沙箱?
|
2
jydeng 72 天前
https://qiankun.umijs.org/zh/api#registermicroappsapps-lifecycles
sandbox 设置 false 试一下 |
3
jydeng 72 天前
sandbox 似乎只能作用于 style ,js 的沙箱要找一下
|
4
liaozzzzzz 72 天前 via iPhone
window 改成 window.proxy ,我记得以前这个是获取子应用的 window 的,你这看着就是 view 是 proxy 代理过直接用不了
|
5
liuhuakawaii OP @jydeng 设置了确实可以解决这个问题,多谢
|
6
liuhuakawaii OP @liaozzzzzz 貌似没有找到这个属性
|