🎩
久々にmarked.js を使って「およよ」となった件
1. はじめに
5年以上使っていなかったmarked.js の最新バージョンを使ってみたところ、HTML表示が崩れるようになってしまいました。ひとまず解決したので書き留めておきます。
読み手の対象:
- 5年以上前の開発文書のメンテナンスをされる方
- marked.js を使っている方
- クライアントサイドのJavascript を使ってHTML表示されている方
2. 結論
v4.0.0(2021-11-02)の仕様変更があったことが判明。たった1行のみの変更で無事表示崩れが解決しました。
変更前の表示結果
# markdown だよ ## markdown だよ ### markdown だよ
ソースの変更前
content.innerHTML = marked(markdown.innerHTML);
→
ソースの変更後
content.innerHTML = marked.parse(markdown.innerHTML);
marked を使ったHTML文書はこちら
-----
<!doctype html>
<html>
<head>
<meta charset="utf-8"/>
<title>Index</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/marked/15.0.7/marked.min.js"></script>
<link rel="stylesheet" href="http://cdnjs.cloudflare.com/ajax/libs/highlight.js/8.9.1/styles/default.min.css">
<script src="http://cdnjs.cloudflare.com/ajax/libs/highlight.js/8.9.1/highlight.min.js"></script>
</head>
<body>
<div id="body">
<!-- text -->
<div id="markdown">
# markdown だよ
## markdown だよ
### markdown だよ
</div>
<!-- text -->
<div id="content"></div>
#
</div>
<style>table, th, td { border: 1px solid black;} </style>
<script>
content=document.getElementById("content");
markdown=document.getElementById("markdown");
content.innerHTML = marked.parse(markdown.innerHTML);
body.removeChild(markdown);
hljs.initHighlightingOnLoad();
</script>
</body>
3. 問題解決のアプローチ
地道にトライ&エラーを試すことに・・・。調べた方は以下。
(1) 最新のバージョンを試す(v15系) → 動かない
(2) いつから動かなくなったかをmarkdedのバージョンを一つ一つ試す
0.3.2 → v15系(動かない) -> v14系(動かない) -> 0.3.3(動く) ... 0.4.0(動く) ->
.... --> v3系(動く!!) -> v4系(動かない!!!!)
(3) github のリリース情報を調べる
v4.0.0
から、「BREAKING CHANGES」のキーワードがここにありました。
(4) HTML文書の修正
※highlight.js のCDN参照も古かったので、あわせて最新化
4. まとめ
生成AI時代にひとつひとつ調べるのは手間でしたが、問題解決して何より。コーヒーがうまい。
過去の文書の継承ができることに感謝。OSSのメンテナーの方々に感謝です。
Discussion