From 554e695ef5abd99a09cc0f0c74dd99f42ed5966c Mon Sep 17 00:00:00 2001 From: oceanzhu Date: Tue, 25 Oct 2022 14:12:05 +0800 Subject: [PATCH] =?UTF-8?q?refactor(stage):=20=E6=A0=B9=E6=8D=AEcr?= =?UTF-8?q?=E6=84=8F=E8=A7=81=E4=BC=98=E5=8C=96stageRender=E6=9E=84?= =?UTF-8?q?=E9=80=A0=E5=87=BD=E6=95=B0=E4=BC=A0=E5=8F=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/stage/src/StageCore.ts | 2 +- packages/stage/src/StageRender.ts | 14 ++++++++------ packages/stage/src/types.ts | 3 ++- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/packages/stage/src/StageCore.ts b/packages/stage/src/StageCore.ts index 78af7fec..8dc4740b 100644 --- a/packages/stage/src/StageCore.ts +++ b/packages/stage/src/StageCore.ts @@ -76,7 +76,7 @@ export default class StageCore extends EventEmitter { this.containerHighlightDuration = config.containerHighlightDuration || 800; this.containerHighlightType = config.containerHighlightType; - this.renderer = new StageRender(config.runtimeUrl, this.render); + this.renderer = new StageRender({ runtimeUrl: config.runtimeUrl, render: this.render.bind(this) }); this.mask = new StageMask(this.renderer.getDocument()?.documentElement); this.dr = new StageDragResize({ core: this, container: this.mask.content, mask: this.mask }); this.multiDr = new StageMultiDragResize({ core: this, container: this.mask.content, mask: this.mask }); diff --git a/packages/stage/src/StageRender.ts b/packages/stage/src/StageRender.ts index fb8c9b4a..dc613ff4 100644 --- a/packages/stage/src/StageRender.ts +++ b/packages/stage/src/StageRender.ts @@ -21,7 +21,7 @@ import { EventEmitter } from 'events'; import { getHost, injectStyle, isSameDomain } from '@tmagic/utils'; import style from './style.css?raw'; -import type { Runtime, RuntimeWindow } from './types'; +import type { Runtime, RuntimeWindow, StageRenderConfig } from './types'; export default class StageRender extends EventEmitter { /** 组件的js、css执行的环境,直接渲染为当前window,iframe渲染则为iframe.contentWindow */ @@ -33,9 +33,9 @@ export default class StageRender extends EventEmitter { public runtimeUrl?: string; - private render: () => Promise; + private render?: () => Promise; - constructor(runtimeUrl: string | undefined, render: () => Promise) { + constructor({ runtimeUrl, render }: StageRenderConfig) { super(); this.runtimeUrl = runtimeUrl || ''; @@ -119,9 +119,11 @@ export default class StageRender extends EventEmitter { if (!this.contentWindow) return; - const el = await this.render(); - if (el) { - this.contentWindow.document?.body?.appendChild(el); + if (this.render) { + const el = await this.render(); + if (el) { + this.contentWindow.document?.body?.appendChild(el); + } } this.emit('onload'); diff --git a/packages/stage/src/types.ts b/packages/stage/src/types.ts index bcaf008c..84ff747f 100644 --- a/packages/stage/src/types.ts +++ b/packages/stage/src/types.ts @@ -54,7 +54,8 @@ export type StageCoreConfig = { }; export interface StageRenderConfig { - core: StageCore; + runtimeUrl?: string; + render?: () => Promise; } export interface StageMaskConfig {