diff --git a/packages/renderless/src/common/deps/dom.ts b/packages/renderless/src/common/deps/dom.ts index aadc5b98e5..27411fd314 100644 --- a/packages/renderless/src/common/deps/dom.ts +++ b/packages/renderless/src/common/deps/dom.ts @@ -11,6 +11,7 @@ */ import { hasOwn, isObject, isNull } from '../type' +import globalConfig from '../global' const isServer = typeof window === 'undefined' const SPECIAL_CHARS_REGEXP = /([:\-_]+(.))/g @@ -225,8 +226,9 @@ export const isVNode = (node: any) => node !== null && isObject(node) && hasOwn. * @returns visibleWidth : 可视区宽度(不含滚动条) */ export const getDomNode = () => { - let documentElement = document.documentElement - let bodyElem = document.body + const viewportWindow = globalConfig.viewportWindow || window + let documentElement = viewportWindow.document.documentElement + let bodyElem = viewportWindow.document.body return { scrollTop: documentElement.scrollTop || bodyElem.scrollTop, diff --git a/packages/renderless/src/common/deps/popper.ts b/packages/renderless/src/common/deps/popper.ts index fca779f853..e3c21fad23 100644 --- a/packages/renderless/src/common/deps/popper.ts +++ b/packages/renderless/src/common/deps/popper.ts @@ -12,6 +12,7 @@ import { on, off } from './dom' import PopupManager from './popup-manager' +import globalConfig from '../global' import { typeOf } from '../type' const positions = ['left', 'right', 'top', 'bottom'] @@ -752,7 +753,8 @@ class Popper { let scrollTop = isFixed ? 0 : getScrollTopValue(scrollParent) let scrollLeft = isFixed ? 0 : getScrollLeftValue(scrollParent) - const viewportWindow = PopupManager.viewportWindow || window + // PopupManager.viewportWindow是为了兼容之前已经采用此方法兼容微前端的用户,后续需要采用globalConfig.viewportWindow + const viewportWindow = globalConfig.viewportWindow || PopupManager.viewportWindow || window boundaries = { top: 0 - (offsetParentRect.top - scrollTop), right: viewportWindow.document.documentElement.clientWidth - (offsetParentRect.left - scrollLeft), diff --git a/packages/renderless/src/common/global.ts b/packages/renderless/src/common/global.ts new file mode 100644 index 0000000000..d9b8f73041 --- /dev/null +++ b/packages/renderless/src/common/global.ts @@ -0,0 +1,5 @@ +const globalConfig = { + viewportWindow: null // 获取真实视口的window,解决在微前端中某些bug +} + +export default globalConfig