javascript - React - 在窗口内渲染 html 而不会影响页面其余部分的最佳实践
问题描述
我从后端获得了 HTML,我需要在 div 内渲染它或其他任何工作
我在显示之前对 HTML 进行了清理
import DOMPurify from "dompurify";
......
var cleanHtml = DOMPurify.sanitize( HtmlPassedFromBackEnd , {
FORBID_TAGS: ["style"],
});
然后将经过清理的 HTML 传递给组件<HtmlComponent template={cleanHtml} />
import React from "react";
export default class HtmlComponent extends React.Component {
render() {
return <div dangerouslySetInnerHTML={{__html: this.props.template }}/>
}
}
它在大多数情况下都可以正常工作,但在另一个示例中失败了有没有像 webview 这样的东西我可以安全地呈现我的 HTML
解决方案
感谢@diedu,我创建了一个与 iframe 匹配的漂亮组件
import React from "react";
import DOMPurify from "dompurify";
import StyledFrame from "react-styled-frame";
import styled from "styled-components";
const InnerBox = styled.div`
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
width: 100%;
height: 100%;
`;
export default class HtmlComponent extends React.Component {
render() {
var {template} = this.props
template = DOMPurify.sanitize(template, {
FORBID_TAGS: ["style"],
});
return <StyledFrame
style={{
width: "100%",
margin: "0 auto"
}}
>
<InnerBox>
<div style={{
overflow: "auto",
width:"100%"
}}
dangerouslySetInnerHTML={{ __html: template }} />
</InnerBox>
</StyledFrame>
}
}
推荐阅读
- javascript - jQuery输入多个基于另一个输入值
- razor - ASP.NET Core - 像 MVC 一样的脚手架标识
- c++ - 使用 curlpp 设置 SSL 记录的最大片段长度协商
- php - 无法将现有表用于 laravel Eloquent
- java - 使用 JAR 文件中的静态变量
- asp.net - Automapper 和 System.ValueTuple 依赖/版本控制问题
- powershell - 如何使用修改后的日期处理 Powershell 或 Batch 提取文件列表
- python - 向数据框添加多列并跳过空值
- c# - 我可以在任务被取消之前处理 CancellationTokenSource 吗?
- php - 如何确保 mysqli 准备语句是正确的?