极简 Markdown 阅读器
Safe and Simple Markdown Reader in the Browser
浏览器里的 Markdown 阅读器,极简,安全。
使用浏览器阅读 Markdown 的好处
- 不需要安装软件
- 如果你和我一样同时使用 Firefox/Chrome 等多个浏览器,
那么,使用本阅读器就能确保 markdown 文档里的链接在当前浏览器里打开。
极简
只有一个 HTML 文件,包含 HTML CSS JavaScript 一共不到 100 行代码。
安全
不安装软件,不安装浏览器插件,减少危险因素。
自由
真正脱离任何生态。
回归本质, Markdown 文档就是纯文本文档,可以自由地使用任何文本编辑器,
回归本质, Markdown 渲染后就是 HTML, 可以自由地使用任何浏览器。
使用方法
项目地址: https://github.com/ahui2016/ss-markdown-reader/
本 markdown 阅读器就是一个 html 文件,下载该文件后,双击打开即可使用。
打开网页后,拖放 md 文件到网页中即可阅读。
全部代码
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Markdown Reader</title>
<script src="https://cdn.jsdelivr.net/npm/dompurify/dist/purify.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/marked/lib/marked.umd.js"></script>
<style>
body {
margin-left: 50px;
margin-right: 50px;
margin-bottom: 100px;
}
code {
color: #c06;
background-color: #ffe;
}
pre, pre>code {
color: black;
background-color: #eee;
}
</style>
</head>
<body>
<p><input type="file" id="upload-btn" accept=".md,.txt"></input></p>
<div id="alert-when-upload" class="alert-danger"></div>
</body>
<script>
"use strict";
const uploadBtn = $query('#upload-btn');
const alertWhenUpload = $query("#alert-when-upload");
const body = $query("body");
uploadBtn.addEventListener('change', event => {
alertWhenUpload.innerText = "";
const file = event.target.files[0];
handleFile(file);
});
async function handleFile(file) {
if (!file) return;
try {
// https://developer.mozilla.org/en-US/docs/Web/API/Blob/text
const md = await file.text();
const dirty = marked.parse(md);
const clean = DOMPurify.sanitize(dirty);
body.innerHTML = clean;
} catch (error) {
alertWhenUpload.innerText = "出错: " + error;
}
}
function $query(selectors) {
return document.querySelector(selectors);
}
// https://developer.mozilla.org/en-US/docs/Web/API/File_API/Using_files_from_web_applications
const dropbox = $query("html");
dropbox.addEventListener("dragenter", dragenter, false);
dropbox.addEventListener("dragover", dragover, false);
dropbox.addEventListener("drop", drop, false);
function drop(e) {
e.stopPropagation();
e.preventDefault();
handleFile(e.dataTransfer.files[0]);
}
function dragenter(e) {
e.stopPropagation();
e.preventDefault();
}
function dragover(e) {
e.stopPropagation();
e.preventDefault();
}
</script>
</html>
有道理,可以当作单页应用。
发布到 github page 就不用保存到本地了。