查看: 10|回复: 0

杂 谈 | new neirong

[复制链接]
发表于 2025-7-28 19:12 | 显示全部楼层 |阅读模式
根本原因  
1. `marked.min.js` + 你旧脚本是通过 **`.textContent`** 读取 `<markdown>` 里的纯文本,再 `marked.parse()` → 成功渲染。  
2. 新脚本改成 **`.innerHTML`** 读取 `<markdown>` 里已经 **被浏览器转义** 的内容(`<table>` 等),于是 `marked.parse()` 只能解析出 **纯文本**,Markdown 失效。

---

## ✅ 零侵入修复方案(仅改 footer)

**把 footer 里那段脚本替换为:**

```html
<script>
/* 手机版:只读 <markdown> 的纯文本再重新渲染 */
(function () {
    /* 1. 找到所有 <markdown> */
    document.querySelectorAll('markdown').forEach(function (el) {
        if (el.dataset.done) return;               // 只执行一次
        const raw = el.textContent.trim();         // 关键:读纯文本
        if (!raw) return;

        el.innerHTML = DOMPurify.sanitize(marked.parse(raw));
        el.dataset.done = '1';
    });

    /* 2. 代码高亮 */
    if (window.hljs) hljs.highlightAll();
})();
</script>
```

---

## ✅ 一句话总结  
> **用 `.textContent` 而不是 `.innerHTML` 去读取 `<markdown>` 的内容,**  
> **就能让 Markdown 渲染重新生效,且完全避开二次转义问题。**
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则