0

0

调用接口返回的是一个html页面如何显示

心靈之曲

心靈之曲

发布时间:2026-02-13 16:16:01

|

265人浏览过

|

来源于php中文网

原创

最稳妥的显示方式是用 iframe;动态创建并设 srcdoc 属性可内联渲染同源 html 字符串,跨域则需后端配置 cors 或 frame-ancestors,ie 不支持 srcdoc 时可用 blob url 降级,局部渲染推荐 domparser 解析后挂载 body 子节点。

调用接口返回的是一个html页面如何显示

iframe 直接嵌入最省事,但要注意同源和安全限制

如果后端返回的是完整 HTML 字符串(比如 fetch 拿到的是一段含 ... 的文本),直接写进 innerHTML 会丢掉 script、style 和事件绑定,也不执行 JS。最稳妥的显示方式是用 iframe

实操建议:

  • 动态创建 iframe,设 srcdoc 属性填入 HTML 字符串(支持同源内联渲染)
  • 若接口跨域,且返回的是真实 HTML 页面(不是字符串),可直接设 src 为接口 URL,但需后端配 Access-Control-Allow-Origin 或允许 iframe 嵌入(X-Frame-Options / Content-Security-Policy: frame-ancestors
  • srcdoc 不支持 IE,如需兼容 IE,得降级用 Blob + URL.createObjectURL 构造 blob URL

DOMParser 解析 HTML 字符串再挂载,适合局部渲染

当只需要显示 HTML 片段(比如一段富文本内容),且不依赖原页面的 JS 或全局样式时,DOMParser 是更轻量的选择——它能把字符串转成真实的 DOM 节点,保留结构和属性。

常见错误现象:

立即学习前端免费学习笔记(深入)”;

  • 直接 el.innerHTML = htmlStr 后,<script></script> 标签不执行,<link><style></style> 不生效
  • DOMParser 解析后忘了把 body 子节点 append 进去,而是 append 了整个 document 对象

正确做法:

IT领域SHOP(IT购物网)
IT领域SHOP(IT购物网)

做了一些修改,美化了一下,修正错误如下:评论没有提交正文的问题特价商品的调用连接问题删掉了2个木马文件去掉了一个后门补了SQL注入补了一个过滤漏洞浮动价不能删除的问题不能够搜索问题收藏时放入购物车时出错点放入购物车弹出2个窗口修正定单不能删除问题VIP出错问题主题添加问题商家注册页导航连接问题添加了导航FLASH源文件添加了热点商品调用销售排行不能显示热点商品不能显示等更多问题

下载
  • new DOMParser().parseFromString(htmlStr, 'text/html')
  • parsed.body.childrenparsed.body.childNodes,再逐个 appendChild
  • 注意:解析出的脚本默认不执行,如真需要,得手动提取 <script></script> 内容并 eval(不推荐)或创建新 script 标签插入

后端返回 HTML 字符串时,前端别漏掉字符转义和 XSS 防御

很多接口“返回 HTML”其实是返回一个 JSON 字段,值是 HTML 字符串(如 { "content": "<div onclick="alert(1)">..." })。这时候直接插进页面等于开后门。 <p>使用场景:</p> <ul> <li>CMS 富文本内容下发</li> <li>邮件模板预览</li> <li>第三方生成的报告页片段</li> </ul> <p>关键提醒:</p> <ul> <li>如果内容可信(如自家后台编辑器产出),至少做基础过滤:<code>DOMPurify.sanitize(htmlStr)

  • 如果内容不可信(如用户提交),绝不能用 innerHTMLsrcdoc;应服务端渲染成纯文本,或前端只解析白名单标签(如 marked 渲染 Markdown)
  • Chrome 最新版对 srcdoc 中的 javascript: 协议已拦截,但老浏览器仍可能触发 XSS
  • React/Vue 项目里显示 HTML 字符串,别硬套 v-htmldangerouslySetInnerHTML

    框架层封装了安全机制,但开发者常忽略上下文。比如在 React 中写 {dangerouslySetInnerHTML: { __html: apiRes }},看着简洁,实际埋雷。

    性能与兼容性影响:

    • 每次更新都触发整块 HTML 重解析,无法利用虚拟 DOM diff,滚动/动画易卡顿
    • Vue 的 v-html 会清空元素内所有响应式绑定,子组件、指令、事件监听全失效
    • SSR 场景下,dangerouslySetInnerHTML 在服务端渲染时不会执行 script,前后端不一致

    替代思路:

    • 把 HTML 字符串交给专门的渲染组件(如 react-html-parser,可配置 tag 映射为 React 组件)
    • 后端改用结构化数据(如 AST 或 Markdown),前端用统一渲染器,兼顾安全与可维护性
    事情说清了就结束。真正麻烦的从来不是“怎么显示”,而是“谁该负责清理脚本”“样式会不会污染主站”“点击事件绑在哪一层”——这些细节没对齐,光让 HTML 出来,反而更难收场。

    热门AI工具

    更多
    DeepSeek
    DeepSeek

    幻方量化公司旗下的开源大模型平台

    豆包大模型
    豆包大模型

    字节跳动自主研发的一系列大型语言模型

    通义千问
    通义千问

    阿里巴巴推出的全能AI助手

    腾讯元宝
    腾讯元宝

    腾讯混元平台推出的AI助手

    文心一言
    文心一言

    文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

    讯飞写作
    讯飞写作

    基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

    即梦AI
    即梦AI

    一站式AI创作平台,免费AI图片和视频生成。

    ChatGPT
    ChatGPT

    最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

    相关专题

    更多
    json数据格式
    json数据格式

    JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

    436

    2023.08.07

    json是什么
    json是什么

    JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

    544

    2023.08.23

    jquery怎么操作json
    jquery怎么操作json

    操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

    317

    2023.10.13

    go语言处理json数据方法
    go语言处理json数据方法

    本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

    81

    2025.09.10

    chrome什么意思
    chrome什么意思

    chrome是浏览器的意思,由Google开发的网络浏览器,它在2008年首次发布,并迅速成为全球最受欢迎的浏览器之一。本专题为大家提供chrome相关的文章、下载、课程内容,供大家免费下载体验。

    939

    2023.08.11

    chrome无法加载插件怎么办
    chrome无法加载插件怎么办

    chrome无法加载插件可以通过检查插件是否已正确安装、禁用和启用插件、清除插件缓存、更新浏览器和插件、检查网络连接和尝试在隐身模式下加载插件方法解决。更多关于chrome相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

    777

    2023.11.06

    js 字符串转数组
    js 字符串转数组

    js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

    529

    2023.08.03

    js截取字符串的方法
    js截取字符串的方法

    js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

    214

    2023.09.04

    pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
    pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

    本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

    15

    2026.02.13

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    Bootstrap 5教程
    Bootstrap 5教程

    共46课时 | 3.3万人学习

    AngularJS教程
    AngularJS教程

    共24课时 | 3.6万人学习

    CSS教程
    CSS教程

    共754课时 | 31.1万人学习

    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号