

新闻资讯
技术百科HTML原生不支持标签,正确方案是:构建时处理(如Vite/Webpack)、fetch()动态加载(需服务端环境)或iframe(局限大),禁用原生include。
,别试了HTML 标准里根本没有 这种语法,浏览器直接忽略或报解析错误。很多初学者在写静态页
面时想复用导航栏、页脚,一搜“HTML 导入外部文件”就掉进这个坑——不是代码写错了,是思路错了。
fetch() + innerHTML 是最通用的动态加载方案现代浏览器都支持 fetch(),适合加载同源的 HTML 片段(如 nav.html、footer.html),再插入到指定容器中。注意:不能跨域,且需服务端环境(file:// 协议下会触发 CORS 错误)。
常见错误现象:
Access to fetch at 'xxx.html' from origin 'null' has been blocked by CORS policy → 说明你双击打开了 HTML 文件,没起本地服务innerHTML 插入的 默认不运行,得手动 eval() 或创建新 script 标签fetch('nav.html')
.then(res => res.text())
.then(html => {
document.getElementById('nav-container').innerHTML = html;
})
.catch(err => console.error('加载失败:', err));
简单但有严重局限性虽然能显示外部 HTML,但本质是嵌入一个独立文档上下文,和主页面样式隔离、JS 不互通、SEO 不友好、移动端响应难适配。仅适合嵌入完全独立、无需交互的模块(比如第三方公告板)。
使用场景限制:
内部元素样式height: 100% 在 iframe 上无效,必须显式设高或用 JS 动态调整,所有链接会在新窗口打开,不可控所谓“导入 HTML”,在实际项目中几乎都交给构建工具完成。浏览器只管加载最终拼好的 HTML,不操心拆分逻辑。
主流做法:
vite-plugin-html 或 html-webpack-plugin + lodash.template 在构建时注入片段fs.readFileSync() 同步读取并拼接字符串(注意路径和编码)关键点:这些方法生成的是纯 HTML,没有运行时依赖,兼容性最好,SEO 友好,也避免了 CORS 和执行时机问题。
容易被忽略的地方是开发阶段的热更新——如果用纯 fetch 加载,改了 nav.html 需手动刷新;而构建方案配合 HMR,改完片段自动重编译并刷新页面。