srcdoc优先级永远高于src,只要其值非空,浏览器就忽略src并直接渲染srcdoc内容;它要求完整HTML文档结构,必须配sandbox且为IE提供src降级。

srcdoc 和 src 同时存在时,谁生效?
srcdoc 优先级永远高于 src。只要 srcdoc 属性存在且值非空字符串,浏览器就忽略 src,直接用 srcdoc 的内容渲染 iframe —— 不发网络请求,不加载外部资源,整个文档结构由 srcdoc 字符串决定。
-
srcdoc值为空字符串(srcdoc="")或仅含空白符时,行为退回到src - 哪怕
src指向一个真实可访问的 HTML 文件,只要srcdoc存在且非空,它就不会被加载 - 这个优先级是规范强制的,不是浏览器实现差异;Chrome、Firefox、Safari、Edge 全部一致
为什么 srcdoc="<p>hi</p>" 渲染失败?
因为 srcdoc 不接受 HTML 片段,它要求传入的是**完整 HTML 文档字符串**。浏览器把它的值当作整个 document 的源码解析,缺任何一层结构都可能出问题。
- 必须包含
<!DOCTYPE html>(推荐)、<html>、<head>、<body> -
srcdoc="<p>hi</p>"❌:Safari 直接空白,Chrome 可能自动补但不可靠 -
srcdoc="<!DOCTYPE html><html><head><title>X</title></head><body><p>hi</p></body></html>"✅ - 所有双引号需转义:若内联写
style="color:red",外层属性建议用单引号包裹,或写成style="color:red"
IE 下 srcdoc 完全无效,怎么 fallback?
IE(包括 IE11)对 srcdoc 属性完全无视——不报错、不警告、不降级,iframe 就是空白。这不是兼容性“弱”,而是彻底不识别。
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
- 必须同时设置
src和srcdoc:<iframe src="fallback.html" srcdoc="<!DOCTYPE...>"></iframe> - 现代浏览器走
srcdoc,IE 自动跳过该属性,读取并加载src指向的文件 - fallback 文件可以是静态 HTML,也可以是
src="data:text/html;charset=utf-8,<...>",但注意 data URL 长度限制(约 2MB) - 不要依赖 JS 检测后动态赋值
srcdoc——IE 连属性名都不认识,JS 也读不到
动态改 srcdoc 会丢失状态吗?
会,而且是彻底销毁重建。给 iframe.srcdoc 赋新值,等价于刷新整个 iframe:所有 JS 上下文、定时器、事件监听器、console 输出全部清空。
立即学习“前端免费学习笔记(深入)”;
-
iframe.srcdoc = newHtml→ iframe 内部 document 和 window 实例被替换,旧引用全部失效 - 内联脚本会重新执行,但无法访问父页面变量(如
window.api),除非用postMessage - 不要用于高频更新场景(比如每敲一个字就重写 srcdoc),改用
iframe.contentDocument.write()+document.close()(需同源且无 sandbox 限制) - 如果用了
sandbox="allow-scripts",每次重写后脚本权限仍保留,但作用域仍是全新隔离环境


















