WebSocket 連線狀態的判讀與除錯
WhatsApp 網頁版在載入後會建立一條 WebSocket 連線(通常指向 web.whatsapp.com 的 wss:// 端點),用來接收訊息、聯絡人更新與在線狀態。若 QR Code 畫面持續空白,第一步應開啟瀏覽器開發者工具(F12)的「網路」分頁,篩選「WS」類型,觀察連線是否停留在 101 Switching Protocols 之前。多數情況下,連線若在 10 秒內未完成握手,代表瀏覽器到伺服器之間有代理或防火牆攔截了 WebSocket 升級請求。常見於企業網路強制走 HTTP 代理的環境,此時可嘗試切換至行動熱點,或請網管將 *.whatsapp.com 與 *.whatsapp.net 加入允許清單。
另一個判斷依據是主控台(Console)的錯誤訊息。若出現 Mixed Content 警告,表示頁面被以 HTTP 載入但嘗試建立 HTTPS 連線,請確認網址列為 https:// 開頭。若出現 QuotaExceededError,則是瀏覽器本機儲存空間已滿(IndexedDB 通常需要 50MB 以上可用空間),清除站點資料後重新載入即可。
QR Code 不顯示的三類成因與對應做法
QR Code 是由前端 JavaScript 在取得伺服器下發的配對金鑰後即時繪製,因此「不顯示」可細分為三類:
- 腳本未執行:瀏覽器阻擋了第三方腳本或啟用了嚴格追蹤防護。可暫時關閉追蹤防護,或將本站加入例外清單後重新整理。
- 畫布渲染失敗:部分舊版瀏覽器(如 Chrome 80 以下)對 Canvas API 支援不完整。建議升級至 Chrome 110、Edge 110、Firefox 115 或 Safari 16.4 以上版本。
- 配對請求被快取攔截:Service Worker 快取了過期的配對端點。在開發者工具的「應用程式」分頁中取消註冊 Service Worker,並勾選「略過快取」後強制重新載入(Ctrl+Shift+R)。
若上述方法均無效,可開啟無痕視窗測試。無痕模式預設停用擴充功能與既有 Cookie,若無痕視窗能正常顯示 QR Code,問題通常出在某個瀏覽器擴充功能(常見為廣告阻擋或隱私保護類)干擾了頁面腳本。
掃碼後無反應:從手機端到網頁端的鏈路檢查
掃碼動作本身是手機 App 讀取網頁顯示的二維碼,從中解析出配對金鑰後向伺服器註冊。若手機顯示「已掃描」但網頁遲遲未跳轉,表示配對確認封包未能送達網頁端。排查順序建議如下:
- 確認手機與電腦的系統時間誤差在 5 分鐘以內。時間偏差過大會導致 TLS 憑證驗證失敗,連線被靜默丟棄。
- 檢查手機是否開啟了 VPN 或私人 DNS。部分 VPN 會改寫 DNS 解析結果,使手機連到非預期的伺服器節點。可暫時關閉後重試。
- 在網頁端觀察 WebSocket 是否已建立但無訊息流入。若連線存在卻無資料,可能是中間裝置(如公司防火牆)對長連線設定了閒置逾時。可嘗試重新整理頁面,讓連線重新協商。
- 最後手段是登出所有已連結裝置:在手機 WhatsApp 的「已連結的裝置」中移除所有紀錄,再重新掃碼。這會清除伺服器端的配對狀態,通常能解決殘留的無效工作階段。
訊息不同步與檔案上傳失敗的處理
訊息不同步通常表現為網頁端缺少最近幾筆對話,或已讀狀態與手機不一致。WhatsApp 網頁版的訊息同步依賴本機 IndexedDB 儲存最近資料,若儲存配額不足或資料庫結構損毀,同步就會中斷。可在開發者工具的「應用程式」分頁檢視 IndexedDB 使用量,若接近上限,清除站點資料後重新登入即可重建。多數情況下,同步延遲在重新整理後 30 秒內會恢復;若超過 2 分鐘仍未同步,請檢查網路是否對長連線做了流量整形。
檔案上傳失敗則多半與檔案大小及網路穩定性有關。WhatsApp 網頁版單檔上限一般為 2GB(依帳號與伺服器端設定可能略有差異),且上傳過程需要保持 WebSocket 連線不中斷。若上傳大檔頻繁失敗,建議先壓縮圖片或影片,或改用 https://web.whatsapp.com 的桌面用戶端。此外,瀏覽器若設定了「上傳時阻擋第三方 Cookie」,可能導致上傳請求缺少必要的工作階段憑證,可將本站加入允許清單後重試。