能從 URL 與 origin 判斷頁面由檔案系統或本機伺服器提供。
- 為什麼重要
- 開啟來源會影響 origin、資源請求、CORS 與部分 Web API;不先確認來源,後面的錯誤很容易判斷錯方向。
- 完成條件
- 以檔案直開與 localhost 各開同一頁,不查看 Solution。
- 成功狀態
- 畫面同時列出真實 protocol、origin 與 href,並能說明 file: 與 http: 的差異。
- 證據位置
- 網址列與畫面顯示一致的 protocol、origin、href
LESSON-01 · 自主延伸
把「開發環境與瀏覽器排錯」拆成 3 個可獨立完成、可重設、可驗證的自主學習 module。
成果:能用固定證據鏈判斷頁面開啟方式、更新是否生效與第一個錯誤位置。
需要的檔案:files/starter/index.html(整合起點,保留跨 module 的最小缺口。)
完成後:能用固定證據鏈判斷頁面開啟方式、更新是否生效與第一個錯誤位置。
逐項展開;答不出來時先走補救連結,不必硬做。
自我檢查:我能否開啟 Elements、Console 或 Network 並找到本頁?
每一個目標只對應一個 module;成功狀態必須能指出證據。
依序展開;每次只改一項,操作後確認該模組自己的 DOM、progress 與 evidence。
白話:file:// 是直接讀電腦裡的檔案;localhost 是瀏覽器透過 HTTP 跟本機伺服器要頁面。
正式說法:URL scheme 是 file: 時不經 HTTP server,localhost 則使用 http: 或 https: origin;origin 由 scheme、host 與 port 組成。
何時使用:頁面直開正常、改用 Live Server 卻失敗,或 fetch/module/CORS 表現不同時先檢查。
修改前後:Before:只說「我開了 HTML」。After:能以 protocol、origin、href 三個值指出真實來源。
常見混淆:localhost 不是公開網站;它是同一台電腦上的本機網路服務,也不等於雙擊 HTML 的 file://。
情境:同事說「本機都一樣」,但頁面在雙擊與 localhost 的資源表現不同。
起始狀態:畫面尚未讀取任何 location 值。
目前主題:file:// 與 localhost 的資源來源差異
protocol:
origin:
href:
預期:畫面同時列出真實 protocol、origin 與 href,並能說明 file: 與 http: 的差異。
證據:網址列與畫面顯示一致的 protocol、origin、href
第一個檢查:先看網址列是 file: 還是 http:,再對照畫面 protocol。
重設:重新整理,或改用另一種開啟方式後再按一次。
白話:先確定編輯器真的存檔,再讓瀏覽器重新要資源;強制重整是在排除快取干擾。
正式說法:reload 會產生 navigation entry;Resource Timing 的 transferSize 可作為網路傳輸與快取候選證據,但不能單獨當成所有瀏覽器的快取定論。
何時使用:修改 HTML/CSS/JS 後畫面沒變,但 Console 也沒有新錯誤時。
修改前後:Before:凭感覺連按重新整理。After:版本字串與 timing 證據能對上這次載入。
常見混淆:強制重新整理不會幫你儲存編輯器中尚未儲存的檔案。
情境:你已改過標題,但瀏覽器似乎還是舊版。
起始狀態:版本固定為 saved-v1,尚未讀取本次 navigation/resource timing。
目前主題:儲存→一般重新整理→強制重新整理
畫面版本:
navigation:
cache:
預期:畫面版本由 saved-v1 變 saved-v2,並顯示 navigation.type、transferSize 與 cache candidates。
證據:可見版本 before/after、navigation.type、transferSize 與 cacheCandidates
第一個檢查:先確認畫面 before 是 saved-v1,再看 navigation.type。
重設:按全部重設將版本恢復 saved-v1;重新整理可重新讀 timing。
本模組官方來源:MDN|HTTP caching
白話:先問檔案有沒有到,再問程式有沒有跑,最後確認頁面實際長什麼樣。
正式說法:Network 面板觀察 request/response;Console 觀察 JavaScript runtime 與記錄;Elements 觀察當前 DOM、attribute 與樣式命中。
何時使用:樣式沒有出現、按鈕沒反應、圖片破圖或畫面內容與檔案不一致時。
修改前後:Before:在程式碼中隨機修改。After:先記錄第一個失敗的 request/runtime/DOM 證據再修正。
常見混淆:Network 的 404 不是 JavaScript 語法錯誤;Elements 也不是磁碟上尚未儲存的 HTML 原始碼。
情境:頁面的圖片破圖,且一個狀態區塊沒有樣式;你需要找第一個失敗層。
起始狀態:圖片 src 尚未指向 missingPath,Console 無本練習記錄,DOM 也沒有 inspected 標記。
目前主題:Network→Console→Elements 的排錯順序
Network:尚未檢查
Console:尚未檢查
Elements:尚未檢查
預期:同一次操作可觀察 missing URL/error、Console 記錄與 Elements data-debug-inspected=true。
證據:missing resource URL/error、Console recorded=true、Elements marked=true
第一個檢查:先在 Network 找 intentionally-missing.png,不要先改 selector。
重設:按全部重設或重新整理;missing resource 是故意本地失敗,不會寫入外部系統。
本模組官方來源:MDN|Browser developer tools
情境:在同一份章節作品中整合 3 個 module,排除單項通過但組合失敗的問題。
交付:能用固定證據鏈判斷頁面開啟方式、更新是否生效與第一個錯誤位置。
檔案:files/starter/index.html 定位:#observe
操作:逐項讀取 outcomes,執行一次現況操作。
// OBSERVE:不修改程式,先記錄第一個失敗 moduleId。預期:能指出第一個未通過 module。
證據:第一個 moduleId 與缺少的 evidence。
原因:先觀察可避免未重現就直接改答案。
卡住先查:確認開啟的是 files/starter/index.html。
檔案:files/starter/index.html 定位:#modify
操作:按下檢查來源,再分別以 file:// 與 localhost 開本頁,比較三個真實值。 → 按下版本檢查,讓畫面版本從 saved-v1 變 saved-v2,同時讀取 navigation 與 resource timing。 → 產生本地 missing resource,依 Network、Console、Elements 顯示三組不同證據。
// 01-01-file-localhost: 按下檢查來源,再分別以 file:// 與 localhost 開本頁,比較三個真實值。
// 01-02-topic: 按下版本檢查,讓畫面版本從 saved-v1 變 saved-v2,同時讀取 navigation 與 resource timing。
// 01-03-network-console-elements: 產生本地 missing resource,依 Network、Console、Elements 顯示三組不同證據。預期:能用固定證據鏈判斷頁面開啟方式、更新是否生效與第一個錯誤位置。
證據:網址列與畫面顯示一致的 protocol、origin、href;可見版本 before/after、navigation.type、transferSize 與 cacheCandidates;missing resource URL/error、Console recorded=true、Elements marked=true
原因:逐項整合能把回歸定位到明確 module。
卡住先查:回到第一個未通過的 module,只修該處。
檔案:files/solution/index.html 定位:#verify
操作:重新整理並依 outcomes 順序重跑所有證據。
// VERIFY:逐項記錄 pass/fail,不以看到畫面代替 evidence。預期:3/3 module 通過。
證據:每個 moduleId 都有實際結果與重設後重現紀錄。
原因:單項通過不代表整合後沒有 selector、id 或狀態衝突。
卡住先查:若失敗,回到第一個失敗 module,不同時修多項。
檔案:files/starter/index.html 定位:#challenge
操作:替另一個商家情境重做,仍達成:能用固定證據鏈判斷頁面開啟方式、更新是否生效與第一個錯誤位置。
// CHALLENGE:只替換內容與資料,不新增框架或跳過 self-check。預期:能用固定證據鏈判斷頁面開啟方式、更新是否生效與第一個錯誤位置。
證據:轉用後的作品與全數 module self-check。
原因:能轉用才代表理解責任,而非只記住原範例。
卡住先查:先確認共同基底與 module id 未被改壞。
重設方法:重新載入 files/starter/index.html;若 localStorage 不可用,使用頁面內記憶狀態並提供重設按鈕。
挑戰:將同一組責任轉用到另一個商家情境,仍達成:能用固定證據鏈判斷頁面開啟方式、更新是否生效與第一個錯誤位置。
限制:不新增框架。;保留 module id 與驗收證據。
提交證據:提交可直接開啟的作品與逐項 self-check。
拆小:在「開發環境與瀏覽器排錯」先完成第一個尚未通過的 module:file:// 與 localhost 的資源來源差異,不同時修改其他責任。
串接:依 01-01-file-localhost → 01-02-topic → 01-03-network-console-elements 核對各自輸入與證據。
完整解答與原因:依序執行 按下檢查來源,再分別以 file:// 與 localhost 開本頁,比較三個真實值。 → 按下版本檢查,讓畫面版本從 saved-v1 變 saved-v2,同時讀取 navigation 與 resource timing。 → 產生本地 missing resource,依 Network、Console、Elements 顯示三組不同證據。;這個順序能把每個結果對回單一 module,避免整合後無法定位。
完整解答預設收合;先留下自己的嘗試,再開第三層。