源文件超过50行,已替换为不超过50行的伪代码。辅助函数为逻辑抽象,不直接执行。
1async function openModalFromUrl(url) {2 const name = url.searchParams.get("modal");3 const definition = modalRegistry[name];4 if (!definition) return;56 const props = readModalParams(url, definition);7 const restricted = checkModalRestriction(definition);8 modalState.set({ name, props, restricted, loading: true });910 try {11 const module = await definition.loadComponent();12 modalState.setComponent(module.default);13 } catch (error) {14 modalState.setError(error);15 } finally {16 modalState.setLoading(false);17 }18}1920function closeModal() {21 const modal = modalState.current;22 modal.definition.onClose?.();23 if (!modal.definition.persistent) removeModalFromUrl();24}2526function disposeModalHost() {27 removeKeyboardListeners();28}29// 此处未补造异步模块的过期结果保护。已确认说明
- 弹窗系统统一处理组件加载、关闭和权限条件
- 通用modal组件异步加载selected modal,支持persistent/restricted/darkOverlay/preventOutsideClose;Escape关闭并清事件监听;chunk网络错误有专门记录。
- 按需资源加载保留CSP nonce