
用 src 属性直接指定每个 <frame> 加载的页面
每个 <frame> 元素必须通过 src 属性声明初始加载的 URL,否则该窗口将显示空白(或浏览器默认的“about:blank”)。这个属性值可以是绝对路径、相对路径,也可以是 data: URI 或 about:blank。
-
src是必需属性,省略会导致框架内容不可见(不是报错,而是静默失败) - 相对路径以包含
<frameset></frameset>的 HTML 文件为基准解析,不是以父页面 URL 为准 - 若目标页面设置了
X-Frame-Options: DENY或Content-Security-Policy: frame-ancestors 'none',则加载会失败并显示空框(控制台通常有Refused to display ... in a frame错误) - 避免在
src中写 JavaScript 伪协议(如javascript:void(0)),现代浏览器会忽略或报Not allowed to navigate top frame to data URL类错误
多个 <frame> 的 src 必须各自独立设置
不能复用或继承;每个 <frame> 都要显式写自己的 src。即使两个框架想加载相同页面,也得分别写一遍,没有“默认”或“模板”机制。
将 Markdown 文章转换为微信公众号兼容的纯 HTML 格式。当用户要求"转成微信格式"、"生成公众号文章 HTML"、"排版到微信草稿箱"、"微信粘贴格式"时触发。输出带内联样式的纯 HTML,微信编辑器可直接渲染,无需额外适配。支持标题、段落、列表、粗体、行内代码、表格、引用块、代码块、配图的完整转换。
- 错误写法:
<frame name="nav"> <frame name="main" src="home.html">—— 第一个<frame>没有src,结果为空 - 正确写法:
<frame name="nav" src="nav.html"> <frame name="main" src="home.html"> - 不要指望用 JS 动态补全:框架加载发生在 HTML 解析阶段,DOM 就绪时多数
src已发起请求,后期改src只能触发重新加载,无法“回填”初始缺失
注意 <iframe></iframe> 和 <frame> 的 src 行为差异
<frame> 是 <frameset></frameset> 的子元素,已被 HTML5 废弃;<iframe></iframe> 是内联框架,仍在广泛使用。两者都用 src,但上下文和兼容性完全不同。
-
<frame>的src在 IE6–11 和旧版 Firefox 中有效,但在 Chrome 90+、Edge 88+ 等已彻底禁用<frameset></frameset>解析,直接忽略整个<frameset></frameset>块 -
<iframe></iframe>的src仍完全可用,且支持srcdoc替代内容,更可控 - 如果误把
<iframe></iframe>当作<frame>写进<frameset></frameset>,浏览器会直接丢弃该标签,不渲染也不报错
调试 src 加载失败的常见线索
当框架看起来“没加载”,先别急着查 JS,优先确认 src 值本身是否可访问、是否被拦截、路径是否拼错。
- 打开浏览器开发者工具 → Network 标签页,筛选
Doc类型,看对应src请求是否发出、状态码是否为 200 - 检查控制台是否有
Failed to load resource: net::ERR_NAME_NOT_RESOLVED(域名错)、net::ERR_CONNECTION_REFUSED(服务未启)、或Blocked by Content-Security-Policy - 右键框架区域 → “查看框架源代码”,如果弹出空白或 404 页面,说明
src路径根本没命中资源 - 本地文件协议(
file://)下,某些浏览器会因安全策略拒绝加载跨目录的src,比如src="../page.html"在子目录的 frameset 里可能失败
<frame> 已基本退出历史舞台;如果你还在维护老系统,src 的路径解析逻辑和浏览器兼容性比想象中更脆弱——尤其是混合了相对路径、重定向、以及不同服务器的 MIME 配置时,一个看似简单的 src="a.html" 可能因响应头缺少 Content-Type: text/html 而被拒载。

















