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

Next.js中使用dangerouslySetInnerHTML加载HTML文件遇空白屏求助

解决Next.js中dangerouslySetInnerHTML展示HTML空白的问题

按以下步骤排查并修复问题:

1. 确认静态文件存放位置

Next.js规定静态资源必须放在项目根目录的public文件夹下,将你的index.html移到public目录中,否则fetch请求会找不到文件。

2. 修正Fetch请求路径

原代码中fetch('index.html')是相对路径,在不同路由场景下会出现路径错误,改成绝对路径fetch('/index.html'),确保请求指向public目录下的目标文件。

3. 处理完整HTML模板的嵌套冲突

如果你的index.html是包含<html>、<head>、<body>的完整模板,直接塞入React组件的div中会导致DOM嵌套异常,浏览器无法正常解析。可以用DOMParser提取<body>内的有效内容:

修改后的代码:

import React, { useState, useEffect } from 'react';

function MyComponent() {
  const [htmlContent, setHtmlContent] = useState('');

  useEffect(() => {
    async function fetchHtml() {
      try {
        const response = await fetch('/index.html');
        const html = await response.text();
        // 解析HTML并提取body内的内容
        const parser = new DOMParser();
        const doc = parser.parseFromString(html, 'text/html');
        const bodyContent = doc.body.innerHTML;
        setHtmlContent(bodyContent);
      } catch (error) {
        console.error('Error fetching HTML file:', error);
      }
    }

    fetchHtml();
  }, []);

  return (
    <div dangerouslySetInnerHTML={{ __html: htmlContent }} />
  );
}

export default MyComponent;

4. 检查浏览器控制台报错

打开浏览器开发者工具(F12)查看Console和Network标签:

  • 若Network中index.html返回404,说明文件路径仍有问题,重新核对public目录位置和fetch路径
  • 若出现DOM相关报错,基本是完整HTML模板的嵌套问题,用上述DOMParser方法即可解决

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 04:17:41