最近不知道寫什麼,node的源碼有點不知道怎麼入手,所以還在努力學習中…… 在寫微信公眾號的時候遇到了一個小bug,有一個tab欄,在開發者工具、IOS手機上都OK,但是一到我的小米note上就GG了,怎麼切換都無法觸發對應的請求,核心代碼如下: 點擊切換後,會重置分頁的index參數,然後將滾輪弄 ...
最近不知道寫什麼,node的源碼有點不知道怎麼入手,還在努力學習C++中……
在寫微信公眾號的時候遇到了一個小bug,有一個tab欄,在開發者工具、IOS手機上都OK,但是一到我的小米note上就GG了,怎麼切換都無法觸發對應的請求,核心代碼如下:
// 點擊切換 this.pageIndex = 1; this.$el.scrollTo(0, 0);
this.$router.replace({ query: { days: key } }); const data = await this.loadingData(); this.list = data.items;
點擊切換後,會重置分頁的index參數,然後將滾輪弄到頂,請求數據然後賦值給list。
看起來很簡單, 但是在我的安卓機上就是沒反應,後來用了chrome://inspect/#devices發現報了這樣的錯:
這可難倒我胖虎了……簡單在MDN一查,發現第一個彈出來的竟然是Window.scrollTo,這才恍然大悟,這個方法理論上是BOM上的。那麼問題來了,為什麼我在瀏覽器跟IOS可以執行那段代碼呢?
一開始我想的是在chrome里,window被處理成DOM對象的原型,調用scrollTo時通過原型鏈查找實際上調用的是window.scrollTo。
然而並不是這樣:
但是這樣又是正確的:
這TM就很尷尬了,哪裡飛來的方法?只能一個一個原型的翻了,於是我在某個對象上發現了這個:
這個方法確實在原型上啊!難道是微信的DOM比較特殊,自己在chrome外麵包了層皮,把scrollTo搞丟了?
回到了devtool中一層一層的翻,直到我看到了:
還真沒有,這個微信瀏覽器,搞毛線。
結論大概是微信的皮包瀏覽器內核比較舊,某個新版的chrome將scrollTo加到了DOM的原型方法上,至於哪個版本加上的,由於這個東西沒那麼重要,所以在wiki的chrome history也找不到記錄,大概只有在V8的commit裡面尋找線索了。
我可沒那麼閑,反正問題解決了,用的scrollTop,免得又遇到奇怪的bug。