直接用filereader读取.md文件再交marked.parse()渲染是唯一可靠、不依赖服务端且不跨域的方案;fetch('xxx.md')在本地html中必然失败,必须监听change事件、用readastext读取、调用marked.parse()(非marked())、再执行hljs.highlightall()实现代码高亮。

直接用 FileReader 读取上传的 .md 文件内容,再交给 marked.parse() 渲染,是唯一可靠、不依赖服务端、不跨域的方案。其他方式(比如 fetch('xxx.md'))在本地 HTML 文件中必然失败。
上传后立即读取并解析,别走 fetch 路线
用户点击「选择文件」后,浏览器拿到的是 File 对象,不是 URL。试图对它 fetch(file) 或 fetch(file.path) 都无效——fetch 只接受 HTTP(S) URL,且不支持 file:// 协议。常见错误是写成:
fetch(input.files[0]).then(...)
这会直接报 TypeError: Failed to fetch。正确做法是用 FileReader 同步读取文本内容:
-
input元素监听change事件,取event.target.files[0] - 新建
FileReader实例,调用.readAsText(file) - 在
reader.onload回调里拿到reader.result(纯字符串),传给marked.parse() - 把结果塞进目标容器的
innerHTML
marked v4+ 必须显式调用 parse,不能 marked(text)
很多旧教程写 marked(text),这在 v4.0.0+ 版本中已彻底移除,运行时抛 TypeError: marked is not a function。你必须:
Convert Chinese patent PDFs/DOCX/DOCs to structured Markdown. Supports patent publications (A/B/U) and office action documents (审查意见通知书/驳回决定/复审决定书/无效宣告请求审查决定书). Uses MinerU for high-quality OCR text extraction (falls back to Tesseract), Python scripts for
- 确保引入的是 v4+ 的 CDN(如
https://cdn.jsdelivr.net/npm/marked@13/marked.min.js) - 调用
marked.parse(mdString),不是marked(mdString) - 如果要用选项(如支持换行、标题 ID),得提前
marked.use({ breaks: true, headerIds: true }),而不是marked.setOptions()(该方法已在 v4 中废弃)
渲染结果里代码块没高亮?highlight.js 得手动接
marked 只生成带 <pre class="brush:php;toolbar:false;"><code class="js"></code> 结构的 HTML,它不负责语法着色。如果你看到代码块是纯白底黑字,说明高亮没生效。补救步骤:</pre>
- 引入
highlight.jsCSS 和 JS(CDN 地址选一个带语言包的,如https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/github-dark.min.css+https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js) - 在
marked.parse()完成后,立刻调用hljs.highlightAll() - 注意:不要漏掉
<link>引入 CSS,否则即使 JS 执行了也看不到效果
数学公式、表格、图片路径这些怎么处理?
基础 marked 默认支持 GFM 表格和标准图片语法(),但路径是相对当前 HTML 页面的,不是相对于原 .md 文件位置——这意味着上传的文件里写的 ./img/logo.png 在渲染后大概率 404。解决思路分两种:
- 公式:启用 KaTeX 需额外引入库,并配置
renderer.code自定义处理$$...$$块,marked本身不加载 KaTeX - 图片:若需保留原始路径逻辑,只能靠后端代理或提前重写
![]()中的 URL;前端纯静态场景下,建议上传时一并压缩图片并转为 Base64 内联(用FileReader读取图片二进制再data:image/png;base64,...替换) - 表格对齐、脚注等高级特性,确认
gfm: true已启用(v4 默认开启)
真正容易被忽略的是:上传的 Markdown 文件编码必须是 UTF-8(无 BOM),否则中文可能乱码;FileReader 读取时最好显式指定 readAsText(file, 'UTF-8')。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










