应用截图
详细介绍
直接在 github.com 上查看 Markdown JavaScript 演示。
# Markdown JavaScript Viewer(mdjs-viewer)
[mdjs(Markdown JavaScript)](https://www.npmjs.com/package/@mdjs/core) 支持在 Markdown 文档中执行代码并显示交互式演示。
此扩展程序将这一功能直接带到 github.com。
您可以在以下位置查看实时演示:
- GitHub Markdown 文件(例如 README.md)
- GitHub 议题(包括编辑预览、新评论预览和新议题预览)
- ……计划支持更多位置,但尚未实现
## 安全性
执行用户代码,尤其是在 GitHub 议题中执行,可能很危险。
此扩展程序尽可能隔离代码执行。
其安全性可视为与 CodePen 或 JSFiddle 等执行用户代码的页面相当。
安全措施包括:
- 未经用户操作不执行任何代码(例如,必须先点击按钮)
- 在 iframe 中显示演示和执行代码
- 使用 [sandbox](https://www.w3schools.com/tags/att_iframe_sandbox.asp),设置为 `sandbox="allow-scripts"`
- 使用 data URI 填充 iframe
- 不允许向 iframe 外部发出任何请求(unpkg 除外)
这可以防止[所有已知的攻击方式](https://github.com/open-wc/mdjs-viewer/issues/2)。如果您发现新的攻击方式,请[报告](https://github.com/open-wc/mdjs-viewer/issues/new)。
### 警告
为了正常运行,此扩展程序会按以下规则修改 github.com 的 CSP(内容安全策略):
- 向 script-src 添加
- `'unsafe-inline'`,以便在 mdjs iframe 中执行代码块
- `unpkg.com`,以便在 mdjs iframe 中加载用户依赖项
## 演示
启用扩展程序并访问以下页面:
1. [demo-wc-card 的 Readme](https://github.com/daKmoR/demo-wc-card)
2. [demo-wc-card 的议题](https://github.com/daKmoR/demo-wc-card/issues/1)
## 工作原理
它会在 Markdown 页面和议题中添加一个 `show demo ▹` 按钮。点击后,扩展程序会获取原始 Markdown 文本,然后通过 [mdjs](https://www.npmjs.com/package/@mdjs/core) 和一个额外的插件进行处理。该插件会将所有导入(相对导入和裸导入)替换为带有 `?module` 标记的 [unpkg.com](https://unpkg.com/) URL。这样,无需任何服务即可在浏览器中直接加载所有依赖项。
最后,我们使用 mdjs 输出的 HTML 和 JavaScript 内容创建一个 iframe。
## 限制
为了获取议题的原始 Markdown 内容(仅限第一条消息,不包括后续评论),需要向 api.github.com 发送请求。
只有实际点击 `show demo ▹` 按钮时才需要此请求。
GitHub 匿名 API 调用严格限制为每小时 60 次。
如需更多调用次数,需要 API 密钥。(目前还无法向扩展程序提供密钥 🙈,欢迎提交功能请求。)