文件 1.11.6

執行期依賴

本頁列出 NanoMD 載入時自動引入的外部資源、在全域範圍定義的名稱,以及離線或嚴格 CSP 環境需要注意的事。

自動插入的資源

bundle 一被執行,src/data.js 就在 <head> 末端插入下列元素,不需要也無法關閉:

資源 來源 用途
Material Symbols Outlined fonts.googleapis.com(另加 fonts.gstatic.com preconnect) 工具列、提示框、匯出視窗圖示
Mermaid 11.4.1 cdn.jsdelivr.net/npm/mermaid@11.4.1 Mermaid 圖表
code-prettify cdn.jsdelivr.net/gh/google/code-prettify@master/loader/run_prettify.js 程式碼高亮(全域 PR)
NanoMD.css 1.11.6 cdn.jsdelivr.net/npm/@pardnchiu/nanomd@1.11.6 元件樣式

每個資源都附帶 preload 或 preconnect 的 <link>。document 觸發 load 時會呼叫 mermaid.initialize({ startOnLoad: false, ... }) 並在 console 印出版權資訊。

對渲染的影響

情況 結果
CDN 無法連線(離線、內網、被 CSP 擋下) PR 從未宣告,預覽器每 50 ms 的檢查都拋出 ReferenceError 且計時器不會停止;HTML 仍會渲染,但捲動位置不會還原、程式碼不上色、Mermaid 不轉換
Mermaid 未載入 PR 已載入但 mermaid 不存在時,每次渲染結尾拋出一次 ReferenceError;document 的 load 處理也會拋出
圖示字型未載入 工具列顯示圖示名稱文字(如 format_bold)

需要離線使用時,可先在頁面放置 window.PR(自行託管的 code-prettify)與 window.mermaid,NanoMD 不會檢查來源,只看全域變數是否存在。

CSP 白名單

指令 需要允許
script-src https://cdn.jsdelivr.net
style-src https://cdn.jsdelivr.net、https://fonts.googleapis.com、'unsafe-inline'(建構時插入 <style>)
font-src https://fonts.gstatic.com
connect-src https://vimeo.com(Vimeo 縮圖)
frame-src https://www.youtube.com、https://player.vimeo.com
img-src https://i.ytimg.com、Vimeo 縮圖網域、data:

全域名稱

以一般 <script> 載入 NanoMD.js 時,所有頂層宣告都進入全域;以 ESM 匯入 NanoMD.esm.js 時頂層宣告留在 module 作用域,但公開類別與 window 屬性仍會寫到 window:

類型 例子
公開類別 MDEditor、MDViewer、MDParser、PDMarkdownEditor、PDMarkdownViewer
內部函式 createElement、transToHTML、UUID、escapeHTML、setLink 等
內部常數 css、deploy、cloud、isDarkMode、elementUUIDMap 等
window 屬性 _0、$0、_0_、__0、_a 等由字母表迴圈產生的短名稱

以一般 script 載入時,頁面上其他一般 script 若以 const/let/class 在全域宣告同名識別字(例如 createElement、css),後載入的那一支會拋出 SyntaxError: Identifier has already been declared。把自己的程式包進 module 或函式作用域即可避免。

EN