近來不少靜態網頁產生工具都支援使用 Markdown 來寫作,而在網頁上藉由 showdown 等 javascript 工具的轉換,自 Markdown 即時生成 HTML 文件的用法一直為人熟知。於是我就想做個實驗看看直接使用 Markdown 在瀏覽器端動態生成 URL 指定的網頁內容可不可行,結果還不錯,就有了這個玩具 ── kidink,這裡有實際的展示。
實現的方式是使用 Backbone 的 Router 提供的 HTML5 pushState 功能配合 URL 讀取來控制頁面的切換,然後將 URL 指向的 Markdown 原始檔抓回來轉換顯示,這樣就可以省下編譯的步驟來產生一個有料的內容網站。
這個方法重要的運作機制在於,必須使用網頁伺服器自訂404狀態網頁的功能,讓它指向能提供跟首頁一樣功能的頁面(也是可以直接指向首頁啦),才能在找不到網頁(因為指向的位址本身並不存在任何網頁)後去抓取位址對應的 Markdown 原始檔回來。順帶一提由於 Github Pages 有提供自訂404網頁的功能,所以也支援放在 Github 上的用法。
唯一的缺點就是所有的內容都是動態產生,無法被搜尋引擎的爬蟲索引到,如果真的有這個需求得另外採取辦法去補強。