為什麼在 Webflow 中串接 Finsweet CMS Filter 時,直接點網址載入完全正常,但按 Cmd+R 重新整理卻整頁失效?本文深入 Webflow 2026 最新模組引擎原始碼,拆解 TypeError: d.push is not a function 的微任務時序競態問題,並提供 5 行零相依的優雅防禦補丁。

在為高階品牌官網開發 Insights(文章列表)時,為了提供極致的無刷新即時篩選體驗,我們通常會選用業界最成熟的 Finsweet Attributes (CMS Filter) 套件。
然而,在最新的 Webflow 專案中,我們遇到了一個極其隱蔽且詭異的前端現象:直接輸入網址並按下 Enter 時,分類篩選運作自如、文章即時過濾、動態計數器毫秒級跳動,體驗近乎完美;但只要按下鍵盤的 Cmd + R(或 F5)重新整理,整頁篩選器瞬間失去反應、點擊任何分類標籤都毫無效果,文章計數器甚至永遠卡在預設的佔位符文字。
為了找出真相,我們透過無頭瀏覽器(Headless Chrome)掛載底層監聽器,直接抓取 Cmd + R 瞬間被瀏覽器拋出的未捕獲異常(Uncaught Exception)。
追蹤堆疊呈現了非常關鍵的一行錯誤:
TypeError: d.push is not a function
at o.push (webflow.schunk.a94666f7784ede09.js:1:30384)
at Ut (cmsfilter.js:1:5771)
at (cmsfilter.js:1:23066)
錯誤源頭直指 Webflow 的核心執行模組 webflow.schunk.*.js!
我們直接將 Webflow 壓縮後的 Runtime Chunk 進行反編譯分析,找到了 o.push 的底層定義:
// Webflow 引擎核心初始化邏輯
o.push = function(e) {
if (I) {
f(e) && e(); // 若 Webflow 已完全就緒 (I === true),直接執行任務
return;
}
d.push(e); // 若尚未就緒,將任務塞入佇列陣列 d
}
情境 A:網址列輸入 Enter(全新網路請求)
瀏覽器發起 HTTP 請求,資源下載存在微量的網路延遲。Webflow 的核心腳本有充裕的時間完成模組加載,並將就緒旗標 I 標記為 true。當 Finsweet 稍後執行 window.Webflow.push(...) 時,直接走進 if (I) 分支,順暢執行。
情境 B:按下 Cmd + R(磁碟快取重整)
現代瀏覽器直接從記憶體/磁碟快取(Memory/Disk Cache)毫秒級讀取靜態資源。Webflow 在執行 DOM 就緒迴圈時,已經將佇列陣列 d 銷毀或清空,但在微任務佇列中尚未把 I 切換為 true。
就在這個幾微秒的時序真空期,Finsweet 載入並嘗試呼叫 window.Webflow.push(),Webflow 試圖執行 d.push(e),但因為 d 已不是陣列,立即噴出致命的 TypeError: d.push is not a function!
既然問題出在 Webflow 對 window.Webflow.push 的狀態管理漏洞,最乾淨且具備未來向下相容性的解法,就是在 <head> 中為 window.Webflow 建立一層透明的防禦代理(Proxy / Interceptor)。
<script>
// Webflow 引擎重整補丁(修復快取重整時 d.push 崩潰問題)
let _wf = window.Webflow || [];
Object.defineProperty(window, 'Webflow', {
get() { return _wf; },
set(val) {
_wf = val;
if (_wf && typeof _wf === 'object') {
const rawPush = _wf.push;
_wf.push = function(fn) {
try {
return rawPush.call(_wf, fn);
} catch (e) {
if (typeof fn === 'function') fn();
}
};
}
},
configurable: true
});
</script>
<script async src="https://cdn.jsdelivr.net/npm/@finsweet/attributes-cmsfilter@1/cmsfilter.js"></script>
前端工程的魅力往往就在於這些看似玄學、實則嚴密的時序細節。透過深入瀏覽器運作機制與底層堆疊追蹤,我們不僅徹底解決了困擾已久的重整失效問題,更為專案打造了堅不可摧的穩定性。