Markdown: предпросмотр без innerHTML
Предпросмотр markdown: заголовки, списки, таблицы, код-блоки и ссылки. Рендер по белому списку тегов — script из разметки остаётся текстом.
Пустой ввод: вставьте markdown-разметку.
Исходная разметка
Предпросмотр
HTML
Разметка строится по белому списку тегов
Предпросмотр не использует innerHTML: узлы собираются из разобранного документа через createElement и textContent. Сырые <script>,onerror-атрибуты и javascript:-ссылки остаются текстом — код не исполняется, якоря строятся только для http(s). Вкладка «HTML» показывает ровно ту разметку, которая генерируется из документа, с экранированием текста.
Последние разборы
В истории — сводка по составу документа (заголовки, абзацы, слова), сам markdown не сохраняется. Вкладка восстанавливается кнопкой «В закладки».
Готовые примеры
Найдено: 3 из 3
- Предпросмотр README на markdownКусок README: заголовки, списки, инлайн-разметка и код-блок — предпросмотр показывает документ так, как его увидит читатель.
- Markdown-таблица версийТаблица с выравниванием по разделителю: заголовки, строки данных и инлайн-код в ячейках отрисовываются настоящей таблицей.
- XSS-пейлоады в markdown обезвреженыНабор пейлоадов: script, onerror-атрибуты и javascript:-ссылки. Предпросмотр показывает их текстом — код не исполняется, во вкладке HTML видно экранирование.
Что это и как пользоваться
Страница показывает три вида одного документа: исходную разметку, предпросмотр и получившийся HTML. Переключение мгновенное, поэтому видно не только «как выглядит», но и что именно уйдёт на страницу.
Рендер идёт по белому списку: заголовки только h1–h3 (уровни 4–6 обрезаются до третьего), списки с вложенностью до восьми уровней, таблицы до 64 колонок, код, цитаты, ссылки. Всё остальное остаётся текстом.
Ссылки живут только с http и https: javascript:, mailto: и относительные пути превращаются в обычный текст, а не в якорь. HTML не вставляется через innerHTML — узлы собираются поштучно, поэтому тег script в разметке ничего не исполняет.
Код-блоки и код-спаны выводятся как pre и code, а не как экранированный текст: содержимое остаётся данными и не исполняется, даже если внутри попадётся угловая скобка.
Символ # без пробела после него остаётся обычным текстом, а не заголовком: это соответствует CommonMark и избавляет от ложных заголовков в тексте вроде «C#».
Когда пригодится
- Проверить README перед публикацией: увидеть, как разметка отрендерится, и поправить таблицу или список.
- Получить безопасный HTML-фрагмент для вставки в страницу или в письмо.
- Разобрать чужой markdown: понять, почему абзац слипся или список уехал вправо.
- Убедиться, что в тексте не осталось сырого HTML — в предпросмотре он будет виден как текст.
- Проверить, что таблица соберётся: увидеть, где не хватает колонки или строки-разделителя.
- Проверить, как выглядит цитата и вложенный список, прежде чем публиковать текст в блоге.
Чего инструмент не делает
- Это не редактор: файлы не сохраняются, версии не ведутся, экспорта в PDF или DOCX нет.
- Расширения markdown не поддерживаются: сноски, математика, диаграммы и директивы конкретных движков останутся текстом.
- Вложенный HTML не рендерится — это осознанное ограничение, а не дефект: именно оно не даёт разметке исполниться.
- Подсветки синтаксиса в код-блоках нет: страница не подключает сторонних библиотек.
- Ввод ограничен 200 000 знаков: большие документы придётся проверять частями.
Примеры
- Вход
# Заголовок - пункт- Выход
<h1>Заголовок</h1><ul><li>пункт</li></ul>- Вход
текст с <script>alert(1)</script>- Выход
тег показан как текст и не исполняется