html - 不使用危险的SetInnerHTML 渲染的图像
问题描述
React 15.6.2(我知道,这就是我们现在所处的位置)。
我正在尝试使用dangerouslySetInnerHTML
(它来自我们的服务器,没有用户输入)呈现一个 html 页面。它正在工作,除了图像没有渲染 - 我只是得到损坏的图像图标。控制台中没有错误或警告。Chrome、Firefox 和 Edge 也有同样的问题。
这是测试html页面:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<style>
img {
width: 80%;
height: 80%;
overflow: auto;
display: block;
margin-left: auto;
margin-right: auto;
}
</style>
</head>
<body>
<h1 align="center">Test page</h1><br/>
<img src="images/help-feature_main-menu.jpeg" alt="main menu" style="vertical-align:middle"/><br/>
</body>
</html>
这是呈现页面的代码
componentDidMount() {
fetch('/assets/getting_started/index.html')
.then(response => {
if(response.status >= 400) {
throw new Error(`${response.status}: ${response.statusText}`);
}
return response.text();
})
.then(html => this.setState({ html: html }));
}
render() {
return (
<Segment>
<div dangerouslySetInnerHTML={{ __html: this.state.html }} className="html-import" />
</Segment>
);
}
我尝试了fetch
不同形式的路径,包括将图像文件放在与源文件相同的目录中。我检查了它的内容,this.state.html
它看起来不错,即 img 标签在那里看起来正确。
如果我在如下所示的 iframe 中呈现页面,则它可以与图像一起正常工作。但我不想这样做,因为我最终得到了 iframe 和浏览器窗口的滚动条,这很尴尬,或者如果我弄乱了 iframe 容器的高度属性(例如高度:70vh),我可以让它在窗口内调整大小,这样就没有窗口滚动条,但是在不同的高度,iframe 仍然会开始切断,或者最终看起来对于窗口的高度来说太小了。
<div className="html-iframe-container">
<iframe src="/assets/getting_started/index.html"</iframe>
</div>
有什么建议么?谢谢
解决方案
推荐阅读
- javascript - 如何将参数传递到子函数中?
- google-cloud-platform - 将启动脚本日志推送到 gcp 中的单独文件
- sql - CURSOR 的使用会提高在 SQL 中使用 PIVOT 进行查询的性能/速度吗?
- python - Python Linux IBM Lotus Notes 9 - 导出数据库
- python - 如何使用 Python 从我的 CSV 文件生成嵌套的 JSON 数据
- c# - 外键部署到 SQL 服务器的问题 - 代码优先 - 空外键
- javascript - 在 base64 中发送更大的图像时,Nodemailer 崩溃
- git - 如何列出所有分支中每个作者的最新提交?
- vba - IBM MAXIMO:如何使用 REST API 从 PR 创建 PO
- java - 无法运行程序“AdoptOpenJDK\jdk-8.0.232.09-hotspot\jre\bin\java.exe”:CreateProcess 错误=206,文件名或扩展名太长