WKWebView 網路請求Header 丟失

沙漠駝鈴發表於2020-08-16

      WKWebView 是蘋果手機上主要的H5載入控制元件,它相比UIWebView 有諸多優勢。在次不做比較,但是它的坑缺比較多。網上也有很多的例子但是做的比較好的真不多,我在這裡推薦倆部落格供大家參考。https://cloud.tencent.com/developer/article/1005691;https://segmentfault.com/a/1190000016883249 這兩篇介紹的我們日常的碰到的坑,網上其他的篇章介紹的坑沒有這兩篇介紹的透徹,且有些坑還是自己給自己挖的。

     本篇介紹就是自己給自己挖坑的場景之一,也是當前網路上沒有的坑--網路請求header 丟失。

     產生場景:在我們的WKWebView里載入一個具有VOIP功能的頁面,當VoIP呼叫結束後,我們會執行一段JS程式碼,這段程式碼會執行一個網路請求,根據這個請求的結果進行業務上的處理,不管它的結果是成功還是失敗,這個頁面上的其他互動都正常(含網路請求)。而問題是:JS執行的這個網路請求在在H5的外掛裡VCONSOLE 裡看,它沒有Header,沒有Response。在這個JS的請求裡,前後所有的網路請求皆正常。怪異的現象。

      分析過程:1,此頁面在UIWebView上載入正常,在WKWebView上有問題。2,WKWebView 有body 丟失現象,是原生首次LoadRequest時會有的問題,和我們的現象不一樣。3,執行的JS的時機是在VoIP結束通話後。這些有限的資訊裡貌似沒有可用的的資訊供我們去分析和參考,這是我們在腦海中有一個大膽的構想是不是網路阻斷了導致的呢?我們分別用我們內部的辦公軟體和微信進行了測試,當我們在VoIP呼叫的時候,這兩款應用都報了對方忙碌這個提示,這個提示是不是暗示我們的VoIP結束通話的瞬間是不是網路不通呢?我們進行了斷網測試,發現斷網後的確實網路請求不帶Header ,Response 也沒有資料。問題迎刃而解,解決方案:VoIP 修改元件影響範圍大,且工期來不及,我們終端先做一個補救措施,在回撥這段JS 程式碼時做一個網路檢測,只有網路真正的通了後再呼叫JS。

      經過這段分析後留下兩個問題:1 UIWebView為什麼就可以正常執行那段JS程式碼呢?個人猜想,那應該是延時執行JS程式碼導致的。 本人親測在VoIP結束通話後,延遲執行那段JS也是可以的。這個問題大家感興趣可以研究一下。2 為什麼斷網後請求不帶Header 這是不是一個系統BUG,請了解的小夥伴告知。

 

相關文章