例えば、以下のような感じになります。
読み込みに若干のタイムラグが発生しますが、とりあえずイメージしたものを作れました。サーバーにファイルを増やさなくていいのがとても楽。
JavaScript は次の通りです。
// URLパラメータからMarkdownファイルのURLを取得する関数 function getMarkdownUrlFromParams() { const urlParams = new URLSearchParams(window.location.search); return urlParams.get('md'); } // Markdownファイルを取得し、HTMLに変換する関数 async function convertMarkdownToHtml(url) { try { const response = await fetch(url); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } const markdown = await response.text(); return marked.parse(markdown); } catch (error) { console.error('Error:', error); return null; } } // HTMLからh1タグの内容を抽出する関数 function extractH1Content(html) { const parser = new DOMParser(); const doc = parser.parseFromString(html, 'text/html'); const h1 = doc.querySelector('h1'); return h1 ? h1.textContent : null; } // メイン処理 async function main() { const URL = 'https://raw.githubusercontent.com/ユーザ名/リポジトリ名/ブランチ名/'; // Markdownファイルが置かれているURL const mdFile = getMarkdownUrlFromParams(); const errorElement = document.getElementById('error'); const contentElement = document.getElementById('content'); if (!mdFile) { errorElement.textContent = 'URLパラメータにMarkdownファイルが指定されていません。(?md=sample/file.md)'; return; } const html = await convertMarkdownToHtml(`${URL}${mdFile}`); if (html) { contentElement.innerHTML = html; // h1タグの内容を抽出してタイトルに設定 const h1Content = extractH1Content(html); if (h1Content) { document.title = `${h1Content}`; } } else { errorElement.textContent = '変換に失敗したか、ファイルが見つかりません。'; } } // ページ読み込み時に実行 window.onload = main;
続いて、HTML ファイルです。先ほど作った JavaScript を md.js として読み込みます。
<html> <head> <meta charset="UTF-8"> <title></title> <script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script> <script src="./md.js"></script> </head> <body> <div id="error"></div> <div id="content"></div> </body> </html>
昨年に引き続き、今年も暑すぎですね。農業にもいろいろと影響が出ていますが……、何はともあれ健康第一。
皆様もどうぞ、熱中症などには気を付けてお過ごしください。