Skip to content

Использование JavaScript с Markdown

Хотя Markdown в первую очередь является языком разметки для форматирования текста, вы можете улучшить свои документы Markdown с помощью JavaScript, добавив интерактивность и динамические функции.

Понимание ограничений

Стандартные парсеры Markdown не выполняют код JavaScript. Однако существует несколько способов интеграции JavaScript с Markdown:

  1. HTML-теги Script: Включение JavaScript непосредственно в HTML-блоки
  2. Процессоры Markdown: Использование процессоров, поддерживающих выполнение JavaScript
  3. Генераторы статических сайтов: Использование обработки JavaScript во время сборки
  4. Рендеринг на стороне клиента: Добавление JavaScript после преобразования Markdown в HTML

Базовая интеграция JavaScript

Встроенные теги Script

markdown
# Мой интерактивный документ

<script>
function greet() {
  alert('Привет из Markdown!');
}
</script>

<button onclick="greet()">Нажмите</button>

Внешние скрипты

markdown
<script src="https://cdn.example.com/script.js"></script>

<div id="dynamic-content"></div>

Распространенные случаи использования

1. Интерактивные формы

markdown
# Контактная форма

<form id="contactForm">
  <input type="text" id="name" placeholder="Ваше имя">
  <input type="email" id="email" placeholder="Ваш email">
  <button type="submit">Отправить</button>
</form>

<script>
document.getElementById('contactForm').addEventListener('submit', function(e) {
  e.preventDefault();
  const name = document.getElementById('name').value;
  alert('Спасибо, ' + name + '!');
});
</script>

2. Динамическая загрузка контента

markdown
# Последние посты

<div id="posts-container"></div>

<script>
fetch('/api/posts')
  .then(response => response.json())
  .then(posts => {
    const container = document.getElementById('posts-container');
    posts.forEach(post => {
      container.innerHTML += `<h3>${post.title}</h3><p>${post.excerpt}</p>`;
    });
  });
</script>

3. Визуализация данных

markdown
# График продаж

<canvas id="salesChart" width="400" height="200"></canvas>

<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>
const ctx = document.getElementById('salesChart').getContext('2d');
new Chart(ctx, {
  type: 'line',
  data: {
    labels: ['Янв', 'Фев', 'Мар', 'Апр'],
    datasets: [{
      label: 'Продажи',
      data: [12, 19, 3, 5]
    }]
  }
});
</script>

Вопросы безопасности

Защита от XSS

При использовании JavaScript в Markdown всегда очищайте пользовательский ввод:

javascript
// Плохо: прямая инъекция HTML
element.innerHTML = userInput;

// Хорошо: использовать textContent или очистку
element.textContent = userInput;
// или
element.innerHTML = DOMPurify.sanitize(userInput);

Content Security Policy

Реализуйте заголовки CSP для ограничения выполнения скриптов:

html
<meta http-equiv="Content-Security-Policy" 
      content="script-src 'self' https://trusted-cdn.com;">

Лучшие практики

  1. Разделение JavaScript: Храните JavaScript во внешних файлах, когда это возможно
  2. Прогрессивное улучшение: Убедитесь, что контент работает без JavaScript
  3. Использование CDN: Загружайте популярные библиотеки из CDN для лучшего кэширования
  4. Минимизация встроенных скриптов: Используйте делегирование событий вместо встроенных обработчиков
  5. Документирование зависимостей: Четко указывайте необходимые JavaScript-библиотеки

Заключение

Хотя сам Markdown не выполняет JavaScript, вы можете эффективно комбинировать эти две технологии для создания богатых интерактивных документов. Выбирайте метод, наиболее подходящий для вашего случая использования, и всегда приоритизируйте безопасность и пользовательский опыт.

Дополнительные ресурсы

Build by www.markdownlang.com