You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

按返回键(backpress)后iFrame内无法处理响应 异常插入pre标签问题

问题解决方案

根因分析

你遇到的现象本质是未对接口返回的JSON格式响应做解析和转义处理,直接将原始字符串写入了iFrame:

  • 接口返回的是标准JSON结构,实际HTML内容嵌套在JSON的response字段内
  • 该字段的HTML内容额外被包裹了一层双引号,且内部特殊字符被JSON转义
  • 浏览器接收到未处理的纯文本字符串时,会自动用<pre>标签包裹进行纯文本渲染,不会解析为DOM节点

解决步骤

  1. 解析原始JSON响应,取出response字段内容
  2. 去除内容首尾多余的包裹双引号,处理内部JSON转义字符
  3. 将处理完成的标准HTML字符串正确写入iFrame触发渲染

代码示例

// 假设原始接口响应字符串为 rawResponse
const resObj = JSON.parse(rawResponse);
// 取出HTML内容,去除首尾多余双引号、还原转义字符
let htmlContent = resObj.response.replace(/^"|"$/g, '').replace(/\\"/g, '"');

// 获取iFrame的文档对象
const iframe = document.getElementById('你的iFrame节点ID');
const iframeDoc = iframe.contentDocument || iframe.contentWindow.document;

// 写入HTML并触发正常渲染
iframeDoc.open();
iframeDoc.write(htmlContent);
iframeDoc.close();

额外排查建议

  • 写入前可在控制台打印htmlContent,确认内容是带<!doctype html>的完整HTML结构,无多余转义符和包裹引号
  • 若使用History API管理返回状态,建议将处理完成的HTML内容存入state,下次backpress触发时直接读取写入,无需重复解析
  • 确保iFrame未设置text/plain类型的content-type,否则也会强制作为纯文本渲染

内容的提问来源于stack exchange,提问作者Ashish Shukla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 09:24:03