iframe src必须是合法可加载地址,否则白屏且无提示;本地开发须起http服务,生产环境推荐绝对路径;动态赋值前需校验协议;未设宽高或在flex/grid中易塌陷消失;跨域通信只能用postmessage;性能瓶颈在于独立渲染进程与资源重复加载。

iframe src 必须是合法可加载地址,否则白屏且无提示
浏览器对 src 的校验非常严格:空字符串、javascript:void(0)、file:// 协议路径,现代浏览器一律拒绝加载,控制台通常只报 net::ERR_FAILED 或静默失败。这不是 bug,而是安全策略强制拦截。
- 本地开发务必起 HTTP 服务,例如用
python3 -m http.server 8000,然后访问http://localhost:8000/subapp/index.html - 生产环境推荐绝对路径,如
src="/micro/cart.html",避免父页面路由变化导致子应用 404 - 动态赋值前加协议检查:
if (url && (url.startsWith('http') || url.startsWith('/'))) iframe.src = url; - 不要依赖相对路径自动解析——当前页面 URL 是
/admin/user/123时,src="app.js"会尝试加载/admin/user/app.js,极易出错
不设宽高或未处理 flex/grid 容器,iframe 会“消失”
iframe 是替换型内联元素,默认尺寸为 300×150px。在现代布局中,它常因父容器的 display: flex 或 grid 行为被压缩至 0 宽高,表现为“看不见”,但实际已加载。
文章转信息图。将文章/笔记转化为手机可读的 HTML 信息图,自动匹配视觉风格。触发场景:文章转图、笔记转图、信息图、转小红书图、做张图、可视化这篇文章、文生图。
- 必须显式设置样式:
style="width: 100%; height: 400px; border: none;" - 响应式场景下,用
aspect-ratio: 16 / 9配合width: 100%控制比例,防止拉伸变形 - 禁用滚动条请用 CSS:
overflow: hidden加在父容器上;scrolling="no"已废弃且无效 - 移动端需额外加
touch-action: auto和height: 100vh防止滚动穿透失效
跨域子应用只能靠 postMessage 通信,contentDocument 不可用
只要子应用与主站协议、域名、端口任一不同,就触发跨域限制。此时 iframe.contentDocument、iframe.contentWindow.document 等属性读取会直接抛出 DOMException: Blocked a frame from accessing a cross-origin frame,没有降级路径。
- 所有通信必须走
window.postMessage(),且双方都要监听message事件 - 主应用发消息前需确认
iframe.contentWindow存在且非 null(iframe.onload后再发) - 子应用接收消息后,必须校验
event.origin,避免被恶意站点伪造消息 - 不要试图用
document.domain解决跨域——该方式仅适用于同主域不同子域,且已被现代浏览器逐步弃用
iframe 加载慢、资源重复、销毁不彻底是性能主要瓶颈
每个 iframe 都是一套独立渲染进程(Chromium 中为独立 renderer 进程),JS/CSS 全量加载、HTML 解析、事件循环全部重来。频繁创建销毁不仅卡顿,还可能残留定时器、未解绑事件或内存引用。
- 预加载子应用:用
link rel="prefetch"提前触发 DNS 查询和 TCP 预连接,但不执行 JS - 复用 iframe 实例:切换子应用时,不
remove(),改用iframe.src = "about:blank"清空并复用 DOM 节点 - 子应用自身需监听
pagehide或visibilitychange主动清理全局副作用(如setInterval、addEventListener) - 慎用
sandbox属性——虽然提升安全,但禁用脚本、插件后,子应用将无法运行,除非显式加allow-scripts等权限
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










