在标准 Markdown 语法中,本身并不支持直接嵌入可运行的 JavaScript 代码,因为 Markdown 的设计定位是轻量级标记语言,聚焦文本排版而非交互功能。不过,在一些支持扩展的 Markdown 编辑器 / 平台(如 Notion 增强插件、Hexo 等静态博客框架、Jupyter Notebook、部分在线文档工具如 GitBook)中,可通过特定方式实现 JavaScript 的嵌入与运行,以下是常见场景的实现方法:
多数 Markdown 解析器支持内嵌 HTML 标签,因此可直接通过<script>标签嵌入 JavaScript 代码,适用于 Hexo、VuePress、GitHub Pages(配合 Jekyll)等平台:
### 示例:Markdown中运行JavaScript
以下是嵌入的JS代码(点击按钮触发):
<button onclick="showAlert()">点击测试</button>
<script>
function showAlert() {
alert('Markdown中运行的JavaScript!');
console.log('控制台输出测试');
}
</script>
效果:在渲染后的页面中点击按钮会弹出提示框,控制台也会输出日志。
Jupyter Notebook 支持 Markdown 单元格中嵌入 HTML/JS,且可直接运行:
### Jupyter中的JS交互示例
<div id="output"></div>
<script>
document.getElementById('output').innerHTML = `<h3>当前时间:${new Date().toLocaleString()}</h3>`;
</script>
效果:在 Notebook 中渲染后会显示当前系统时间,且代码可实时执行。
部分平台(如 StackEdit、GitBook、Docusaurus)支持通过插件或自定义配置启用 JS:
- StackEdit:直接在 Markdown 中插入
<script>标签即可运行;
- Docusaurus:通过
MDX格式(Markdown+JSX)嵌入交互逻辑,例如:
import React, { useState } from 'react';
### MDX中的交互组件
export const Counter = () => {
const [count, setCount] = useState(0);
return (
<div>
<p>计数:{count}</p>
<button onClick={() => setCount(count + 1)}>增加</button>
</div>
);
};
<Counter />
- 安全限制:GitHub 仓库的 Markdown、GitLab 等平台会过滤
<script>标签(防止 XSS 攻击),因此无法直接运行 JS;
- 环境依赖:仅支持 “Markdown→HTML” 渲染时保留 HTML/JS 的环境,纯静态 Markdown 阅读器(如 Typora 预览模式)通常禁用 JS 执行;
- 替代方案:若需展示可运行的 JS 代码而非执行,可使用 Markdown 代码块标注:
```javascript
// 这里展示JS代码(不执行)
function test() {
return "Markdown代码块示例";
}
```
标准 Markdown 不支持运行 JS,但通过HTML 嵌入或平台扩展功能(如 MDX、Jupyter),可在特定环境中实现 JavaScript 的嵌入与执行。若仅需展示代码,直接使用 Markdown 代码块是更通用的选择。