V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
liuhuakawaii
V2EX  ›  前端开发

第一次用 qiankun, 子应用 window 使用问题请教

  •  
  •   liuhuakawaii · 88 天前 · 1032 次点击
    这是一个创建于 88 天前的主题,其中的信息可能已经有所发展或是发生改变。

    使用 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 也无法解决,不是很理解报错的原因以及解决方案,有没有大佬赐教一下

    6 条回复    2024-09-03 18:46:42 +08:00
    jydeng
        1
    jydeng  
       88 天前
    是不是要关闭 qiankun 的 js 沙箱?
    jydeng
        2
    jydeng  
       88 天前
    jydeng
        3
    jydeng  
       88 天前
    sandbox 似乎只能作用于 style ,js 的沙箱要找一下
    liaozzzzzz
        4
    liaozzzzzz  
       88 天前 via iPhone
    window 改成 window.proxy ,我记得以前这个是获取子应用的 window 的,你这看着就是 view 是 proxy 代理过直接用不了
    liuhuakawaii
        5
    liuhuakawaii  
    OP
       88 天前
    @jydeng 设置了确实可以解决这个问题,多谢
    liuhuakawaii
        6
    liuhuakawaii  
    OP
       88 天前
    @liaozzzzzz 貌似没有找到这个属性
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2479 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 04:53 · PVG 12:53 · LAX 20:53 · JFK 23:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.