記一次前端問題解決歷程(Cannot read Property 'call' of undefined)

場景

echosong 回長沙兩個多月了, 新公司的創業項目 App , 小程序, 公衆號。 目前差app 沒有 作完。 公衆號在前端小美女同事 的主導下采用前端比較火的Vue 技術框架。 一直一來主要方向後端 +架構+ 管理方向。長沙的IT環境不比上海, 回來基本上全棧都要作,乃至技術意外的培訓,市場。javascript

面的輻射性擴張, 對於技術一條道走到黑的方向已經開始造成了挑戰,但願將來打破職業 年齡瓶頸 運氣不要太差。html

言歸問題

Vue+npm + webpack 相關的技術生成單頁的整站應用, 自從開發完上線到目前,一直存在一個不能解決的問題。 訪問時候偶爾回出現如下問題
(Uncaught TypeError: Cannot read Property 'call' of undefined) ,重現刷新下基本上又能進入。機率大概又個 10%前端

解決方案

初步解決

以前覺得跟 webpack 打包相關, 目前對前端的駕馭,沒有從根本去解決。可是出現問題的時候都是index.html 能正常加載出來,js 相關不能加載,多刷新下就能正常,基於這個前提想到了,在入口文件index.html加入了以上代碼java

var refush = setInterval(function () {
            console.log('刷新補救');
            var style = window.getComputedStyle(loading);
            if ( style.display === 'none') {
                clearInterval(refush);
            } else {
                location.reload(true);
            }
    
        }, 2000)

問題解決了一大半,正如log 打印,只是一種打不開的時候補救,未能衝根本上解決問題。webpack

完全解決

週末都是加班,沒有休息過,昨天週日終於給本身放了個假,可是內心裝着問題未解決,對於一個對技術很產品有追求的人來講,這是一種煎熬,讓你沒辦法正常享受休息時光。 因而專門花一天時間來研究這個問題web

找問題點思路:

1 、 以前這個問題曾經讓前同事專門作前端的大牛幫我看,他在上海那邊一直刷新,不管怎麼樣訪問死活重現不了問題,讓其餘地區的小夥伴頁試試了下也沒有此問題
二、 打包線上纔會出現這種問題,本地也沒出現過
四、 再抓包看 每次加載js次序不同
5 、 最奇怪的時候每次還會加載一個 ip 地址相關的東西,而本地報,和其餘地區的包不存在npm

綜上症狀,我開始去查看會不是是哪裏配置有問題,可是對比了一圈下來無果, 因而 一艘那個奇怪的ip小程序


彷佛結果開始浮出水面, 長沙地區的電信,天然想到的DNS 劫持,憤怒之下 發泄對長沙電信的惡行譴責!!
後端

怎麼解決

得知了是dns 劫持,每次劫持的js 地址不同,他是劫持了個人腳本,而後注入了本身的一段腳本 最後在加載個人原來那個js。這樣一來改變了 js 加載的次序,由於VUe框架打包的東西,加載次序是要控制的。這樣一來改變了加載js 次序,那麼就會致使運行程序出現最初的錯誤。架構

這種針對域名的劫持,也沒有什麼其餘的解決辦法 無非

  1. 程序執行次序調整(這個基本上很差辦,由於是npm run build 之後的機制)

  2. 換域名(電信的這種注入他也是有選擇性的針對預定注入,若是換個域名能夠解決,可是這不符合業務上的訴求)

  3. http 換成 https 傳輸過程當中https 須要證書,這種dns 劫持的注入是注入不了的

最終選擇了第三種解決辦法。整個問題獲得了完全解決。

相關文章
相關標籤/搜索