火次果
火次果

暂无菜单项

首页/文章/技术文章/web前端/HTML5/
打开 MD 链接

跨页加载指定 div:fetch 与 DOMParser

发布于 5天前
6

跨页复用一块静态内容时,用 iframe 会带进整套样式与滚动条,用 innerHTML 拼接又容易把对方的标签原样执行。先取文本再解析出目标节点,是更可控的一条路径。

屏幕上显示程序代码,用于说明跨页面加载指定内容的写法
取文本再解析,比直接搬标签更安全

写法

async function loadNotice(target) {
  const res = await fetch('/fragments/notice.html');
  const html = await res.text();

  const doc = new DOMParser().parseFromString(html, 'text/html');
  const node = doc.querySelector('#notice');

  target.textContent = node ? node.textContent.trim() : '';
}

parseFromString 得到的是独立文档对象,脚本不执行、图片与样式不加载,解析过程没有副作用。

三处要点

  1. 只取 textContent。写入 innerHTML 会把来源页的标签与事件属性一并搬过来,注入面随之扩大。
  2. 目标选择器要稳定。id 优先,其次是不带随机后缀的类名,避免依赖层级路径。
  3. 跨域受同源策略约束。目标与当前页不同源时,服务端需返回 Access-Control-Allow-Origin,否则 fetch 直接失败,这一层没有前端绕过手段。

保留格式的取舍

来源内容需要保留加粗、链接等富文本结构时,纯文本注入不再够用,此时先过一遍白名单过滤,再把结果写入。过滤规则放在前端或服务端都可以,但不要跳过这一步直接写入。

什么时候不走前端

页面由服务端渲染时,直接 include 片段更省事,也少一次请求。前端取内容适合公告、说明这类不常变且纯文本的块,以及静态部署、没有后端模板可用的场合。

常见问题(FAQ)

DOMParser 解析出的文档会执行脚本吗?
不会。parseFromString 生成的文档处于非激活状态,脚本不执行,图片与样式资源也不加载,解析过程没有副作用。
可以写入 innerHTML 吗?
静态且来源可控时可以。涉及外部来源时应先做白名单过滤,或改用 textContent 只取文本,避免标签与事件属性被带入。
跨域名取页面内容为什么失败?
受同源策略约束。目标服务需要返回允许的来源头,否则请求在浏览器层被拦下,前端没有绕过方式。
用 iframe 实现有什么问题?
iframe 会带来源页面的样式与滚动条,尺寸需要额外同步,且无法把内容并入当前文档的结构与无障碍树。
目标 div 不存在时怎么处理?
解析结果为 null 时应写入空字符串或占位文案,避免把 null 转成字符串输出到页面上,同时保留一次失败记录便于排查。
DOMParserDOM操作fetch内容注入前端安全
支持作者
如果这篇内容对你有帮助,可以请作者喝杯咖啡
0 点赞
0 收藏
分享
0 讨论
反馈
0 / 600
细中粗
0 讨论
热门最新
总结
暂无总结
嗨,下午好!
所有的成功,都源自一个勇敢的开始
创作
社区
购物
会员
近期热门

暂无数据

火次果
火次果
首页
资迅中心
小店
AI导航
社区
所有的成功,都源自一个勇敢的开始
不辜负每一个勇敢的开始
关于FAQ协议
火次果 © 2026鲁ICP备2025164830号-1