適用:使用者想要一個「打開就能用」的頁面,例如劑量換算、流程對照表、衛教單、檢查前準備清單。
不存任何資料、不需要知道使用者是誰——這是最簡單也最快能上線的類型。
什麼時候用這個 skill
- 使用者描述的需求是「查」「算」「看」,沒有「登記」「填寫」「記錄誰做了什麼」。
- 內容可以寫死在頁面裡,或由使用者在畫面上輸入後即時計算。
- 若需要留下紀錄(誰填了、填了什麼),改用
form-app。
做法
- 建立應用時
archetype選A,manifest 的data.collects留空、skills_used填static-app。 - 簡單的工具一個
index.html就好,CSS 與 JavaScript 直接寫在檔案裡。內容多的(衛教網站、多個主題)可以分成多頁
(about.html,網址 /about 就打得開),也可以把樣式、程式、圖片放進 css/、js/、img/——平台每一頁都支援。
- 東西只能從應用資料夾或平台載入:不要引用外部 CDN、Google Fonts、外部網址的圖片。中文字型用平台書架的
noto-sans-tc(黑體)、noto-serif-tc(明體),清單在https://platform.wanfangai.tw/lib/index.json。上線後安全設定(CSP)一定會擋外部的,
安全檢查卻只會警告、不會攔,所以要自己避免;把它列進 external_endpoints 也沒有用(那只開放 fetch 連線)。
需要套件(圖表、樣式…)先用平台提供的(llms.txt §4.9,清單 https://platform.wanfangai.tw/lib/index.json),平台沒有才下載進資料夾。
圖片、音檔、PDF 放進資料夾,整個資料夾壓縮後不能超過 50 MB;PDF 用連結在新分頁打開,不要內嵌在頁面裡(會被擋)。
內容多、要分好幾頁的(衛教網站、成果報告)改用 content-site。
- 不要用
eval、不要用http://的資源、不要放任何金鑰。 - 手機優先:主要操作按鈕至少 44px 高,文字不小於 16px,欄位一次只問一件事。
- 頁面最上方寫清楚「這個工具做什麼、資料來源是誰、最後更新日期」;最下方放負責人單位。
搬現有的 HTML 資料夾(使用者已經做好一個網頁)
使用者說「我有一個做好的網頁/資料夾,想放上平台」時照這段做。2026-10-15 Gary 整理的情境:同仁自己或請人做過,檔案在電腦裡。
- 就在原本的資料夾做,不要另開新資料夾、不要重寫。分級問診、建立應用後,平台回的起始檔案只取 `app-manifest.yml` 與 `.wanfangai-version`
寫進原本資料夾的最上層;範本的 index.html 不要蓋掉他的。首頁要叫 index.html(不是的話改名,或加一個連過去的 index.html)。
- 先找外部網址,再存版本:在所有
.html、.css、.js裡找http://、https://、//(<script src>、<link href>、CSS 的@import與url(、<img src>)。
| 找到的 | 改成 |
|---|---|
| CDN 上的套件(jQuery、Bootstrap、Chart.js…) | 平台書架有的用書架(清單 https://platform.wanfangai.tw/lib/index.json),沒有的下載進資料夾、改成相對路徑 |
| Google Fonts | 書架的 noto-sans-tc/noto-serif-tc(見上面「做法」第 3 點) |
| 別的網站上的圖片 | 下載進資料夾(確認可以用、沒有病人資料) |
| <iframe> 嵌 YouTube、Google 地圖、Google 表單 | 平台不准任何內嵌:改成一般連結(target="_blank") |
一般的超連結(<a href="https://…">)不用改。改了什麼、為什麼,一項一項告訴使用者。
- 路徑:要用相對路徑(
css/style.css)或從網址根算起(/css/style.css);file:///C:/…、C:\…這種本機路徑上線一定壞。
檔名大小寫要跟 HTML 裡寫的一模一樣——Windows 不分大小寫,平台的伺服器分:Logo.PNG 寫成 logo.png,在他電腦上好好的、上線就破圖。
- 存在瀏覽器裡的舊資料不會跟過來:原本的網頁如果用
localStorage存東西(例如勾選清單、草稿),搬到平台的網址後是另一個網站,打開是空的。
先問使用者那些資料要不要留:要留就請他在舊網頁匯出(沒有匯出鈕就先加一個),要多人共用的改用平台的資料服務(form-app)。
- 存版本:檔案多或有圖片就打包上傳(
wanfangai_upload_url→ 外掛的pack-upload.cjs→wanfangai_save_version帶upload_id),整個資料夾不能超過 50 MB。
資料夾裡不該上線的東西(舊版備份、Word 原稿、.env)先移出去。
- 發佈試用版後,每一頁都點開、看瀏覽器主控台有沒有紅字(被擋的外部東西會出現在那裡),再請使用者自己點一次。
骨架
<!doctype html>
<html lang="zh-Hant">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>工具名稱</title>
<style>
body { font-family: system-ui, sans-serif; margin: 0; padding: 16px; line-height: 1.6; }
button { min-height: 44px; font-size: 16px; }
</style>
</head>
<body>
<h1>工具名稱</h1>
<p>一句話說明用途。</p>
<!-- 表單與結果區 -->
<script>
// 所有邏輯寫在這裡;不要 fetch 外部網址
</script>
</body>
</html>存成 PDF
使用者要把畫面上的結果(計算結果、對照表)印出來、或存成檔案交出去時,用瀏覽器的「列印 → 另存為 PDF」,不用套件(jsPDF 沒有中文字型,不要用)。
2026-10-15 用 Chrome 實測:書架的中文字型會嵌進 PDF、長表格跨頁時表頭會重複、圖表完整。
- 放一顆按鈕:
<button type="button" class="no-print" onclick="window.print()">存成 PDF</button>,
旁邊一句「在列印視窗的『目的地』選『另存為 PDF』;不要日期與網址就取消勾選『頁首及頁尾』」。
- 在
<style>最後加列印樣式——選單、按鈕不印,表格的列不切半、每頁重複表頭,圖不超出紙張:
```css
@media print {
@page { size: A4; margin: 15mm; }
nav, button, .no-print { display: none !important; }
body { padding: 0; font-size: 11pt; color: #000; background: #fff; }
h1, h2, h3 { break-after: avoid; }
tr, img, canvas, figure, .card, .chart { break-inside: avoid; }
thead { display: table-header-group; }
table { width: 100%; }
canvas, img { max-width: 100% !important; height: auto !important; }
- { print-color-adjust: exact; -webkit-print-color-adjust: exact; }
}
```
- 只想印某一塊(例如一筆紀錄、某個篩選後的清單):其他區塊加
class="no-print"。 - 想讓每台電腦印出來的字都一樣,用書架的黑體:
<link rel="stylesheet" href="https://platform.wanfangai.tw/lib/noto-sans-tc@5.3.1/400.css">,font-family: 'Noto Sans TC', system-ui, sans-serif(粗體再載700.css)。
發佈前檢查
- 有「存成 PDF」的:在瀏覽器按一次看預覽——中文正常、按鈕與選單沒印出來、表格沒切半、圖完整。
check.sh(或POST /precheck)沒有 blocker。- manifest:
security_level: 1、visibility依使用者需求(多數選hospital)、data.collects: []。
即使頁面上有假病人案例、示範排班表這類內容,`collects` 還是留空——它問的是「存了什麼」,
不是「顯示了什麼」。填了會讓這個工具被標成「會存資料」,而且不能設為公開(見 synthetic-data)。
- 若內容含病人資訊或員工個資,這個 skill 不適用,請回到分級問診。