main @ 0c327f7(framework 2.0.0),Chromium 141.0.7390.37 headless。 gym 課程本身有 3 條立場資料,所以原網站跑不會遇到;但用框架自帶的 make new-course 產生的骨架課程,第一次開就會中。
- 載入時 console 拋
TypeError: Cannot set properties of null (setting 'hidden') - 點「上課」分頁後,首頁與課程都被藏起來,但上課頁沒有顯示出來,內容區整片空白 (畫面上只剩側欄的「學習進度 0/0」與「重設進度」)
- 每點一次「上課」就再拋一次,上課模式等於死掉
make new-course NAME=bugtest
COURSE=courses/bugtest make build
# 開 dist/bugtest/index.html
實測:
檢查點 | 結果
-- | --
載入後 pageerror | Cannot set properties of null (setting 'hidden')
#view-stance 節點數 | 0(已被移除)
點「上課」後 #view-home 可見 | false
點「上課」後 #main 可見 | false
點「上課」後 #view-player 可見 | false
src/web/js/app.js 裡對 #view-stance 的兩個假設不一致:
init() 在沒有立場內容時把節點整個拿掉(app.js:718-724)
const stanceEl = $("#view-stance");
if (data.stance?.length) { … } else {
stanceEl.remove();
$('.TabNav__item[data-tab="stance"]')?.remove();
}setTab() 無條件解參考它(app.js:267)
$("#view-stance").hidden = tab !== "stance";移除(:723)發生在第一次 setTab()(:757)之前,所以拋錯必然發生。 關鍵是拋錯的位置在下一行 $("#view-player").hidden = … 之前, 而 #view-player 在 index.html:133 預設帶 hidden——它永遠沒機會被取消隱藏。
環境
main@0c327f7(framework 2.0.0),Chromium 141.0.7390.37 headless。gym課程本身有 3 條立場資料,所以原網站跑不會遇到;但用框架自帶的make new-course產生的骨架課程,第一次開就會中。現象
TypeError: Cannot set properties of null (setting 'hidden')重現
make new-course NAME=bugtest COURSE=courses/bugtest make build # 開 dist/bugtest/index.html實測:
檢查點 | 結果 -- | -- 載入後 pageerror | Cannot set properties of null (setting 'hidden') #view-stance 節點數 | 0(已被移除) 點「上課」後 #view-home 可見 | false 點「上課」後 #main 可見 | false 點「上課」後 #view-player 可見 | false根因
src/web/js/app.js裡對#view-stance的兩個假設不一致:init()在沒有立場內容時把節點整個拿掉(app.js:718-724)setTab()無條件解參考它(app.js:267)移除(:723)發生在第一次
setTab()(:757)之前,所以拋錯必然發生。 關鍵是拋錯的位置在下一行$("#view-player").hidden = …之前, 而#view-player在index.html:133預設帶hidden——它永遠沒機會被取消隱藏。