按返回键(backpress)后iFrame内无法处理响应 异常插入pre标签问题
问题解决方案
根因分析
你遇到的现象本质是未对接口返回的JSON格式响应做解析和转义处理,直接将原始字符串写入了iFrame:
- 接口返回的是标准JSON结构,实际HTML内容嵌套在JSON的
response字段内 - 该字段的HTML内容额外被包裹了一层双引号,且内部特殊字符被JSON转义
- 浏览器接收到未处理的纯文本字符串时,会自动用
<pre>标签包裹进行纯文本渲染,不会解析为DOM节点
解决步骤
- 解析原始JSON响应,取出
response字段内容 - 去除内容首尾多余的包裹双引号,处理内部JSON转义字符
- 将处理完成的标准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
相关产品推荐
相关产品推荐

