優雅地除錯線上程式碼

cnguu發表於2020-04-17

問題

接到一個緊急修復需求,發現一個 H5 遊戲在 iOS9 下顯示高度沒有鋪滿螢幕,需要調整高度達到自適應。

需求分析

  1. 頁面是一個 iframe,由 jssdk 控制
  2. iframe 高度 100%,但在 iOS9 下,底部遮蓋高度 20px
  3. 頂部黑邊 20px,由底層寫死,js 無法控制
  4. 頂部黑邊不能移除,目的需要相容曲面屏

初步結論

在 iOS9 下,iframe 的高度 100% 並不是螢幕的高度

驗證結論

除錯環境

  • Charles:Web 除錯代理應用程式
  • 測試機和電腦在同一區域網

配置 Charles

  1. 開啟 Charles,確保已開啟 RecordSSL ProxyWindows Proxy
  2. 開啟 SSL Proxy 設定:Proxy - SSL Proxying Settings,新增本地代理:*:443
  3. 記住代理埠:Proxy - Proxy Settings

配置測試機

  1. 解除安裝遊戲重新安裝
  2. 設定 WIFI 手動代理,IP 為電腦區域網 IP,埠為代理埠
  3. 安裝 SSL 證照,測試機訪問並安裝:chls.pro/ssl

使用 Charles

  1. 測試機開啟遊戲,在 Charles 抓到對應的 js
  2. 右鍵 js,選擇 Map LocalMap From 已自動填寫,選擇 Map To 為本地的 js
  3. 清除 Charles 本地 Session,測試機重新開啟遊戲,現在,js 已經被替換成本地了

得到結論

由於 consolealert 看不到資訊,所以直接把資訊寫到 html 上

分析發現: screen.height 和 iframe 的 clientHeight 相等,也就是頂部黑邊高度也算進去了,所以需要減去黑邊

總結

最麻煩的除錯莫過於,有限時間內,線上程式碼動不得,原生程式碼難測,於是就有了本文,通過“自己劫持自己”的方式,更優雅快速地除錯並修復 BUG,同理,這種方式可以運用到微信開發等。

附言

Charles,是一個抓包神器,不僅可以用於除錯,而且還可以模擬網路狀態(後面來了個新增 Loading 效果的需求,剛好這個功能可以模擬慢速網路),當然還有很多其它用處。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章