
使用 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 2024-09-03 18:06:53 +08:00 是不是要关闭 qiankun 的 js 沙箱? |
2 jydeng 2024-09-03 18:08:41 +08:00 https://qiankun.umijs.org/zh/api#registermicroappsapps-lifecycles sandbox 设置 false 试一下 |
3 jydeng 2024-09-03 18:10:39 +08:00 sandbox 似乎只能作用于 style ,js 的沙箱要找一下 |
4 liaozzzzzz 2024-09-03 18:16:06 +08:00 via iPhone window 改成 window.proxy ,我记得以前这个是获取子应用的 window 的,你这看着就是 view 是 proxy 代理过直接用不了 |
5 liuhuakawaii OP @jydeng 设置了确实可以解决这个问题,多谢 |
6 liuhuakawaii OP @liaozzzzzz 貌似没有找到这个属性 |