淘寶flexible.js漏洞修補

取這樣的標(biāo)題可能會被打,可是我確實順帶解決了淘寶flexible.js的問題。
??———————7.14更新 start—————————
??確實被打臉了,產(chǎn)生這種情況是因為安卓部分webview修改了默認字體,導(dǎo)致1rem和html.fontSize不一致。想當(dāng)然以為根據(jù)屏幕寬度設(shè)置html的字體,會和默認字體無關(guān)。最后代碼貼的代碼還是有效的。祝好!
??———————7.14更新 end—————————
??先聲明兩個變量供下文使用:

//html style font-size
docElementFontSize = document.documentElement.style.fontSize;

//html 最終的 font-size
finalDocElementFontSize = window.getComputedStyle(window.document.documentElement).getPropertyValue("font-size")

rem是根據(jù)html的最終font-size進行響應(yīng): 1rem === finalDocElementFontSize(重點?。?。對于大部分機型,docElementFontSize和finalDocElementFontSize是相等的,但是有些網(wǎng)頁在某些情況下打開的話,會得到docElementFontSize和finalDocElementFontSize不相等的情況,比如我公司的小米Max和榮耀8機型,在市場上算是比較新的機型,測試數(shù)據(jù)都是在QQ上演示,公司的土豪APP也會有這種情況。如下圖:

小米Max

??這是在小米Max的QQ開的測試頁面 ,大佬可以扒網(wǎng)頁看js,屏幕寬度是393px,html的style.fontSize是39.3px(頁面寬度分成10等分),然而html最終fontSize是45.195px!?。∠旅嬖O(shè)置一個灰色的box,高度是1rem,得到的樣式高度是45.1875px?。?!看到這很毀三觀有木有。我在百度和谷歌沒有查到關(guān)于這個的任何問題和資料。眾所周知淘寶玩rem玩的飛起,用QQ打開m.taobao.com如下圖:

小米Max 淘寶

淘寶在body寫了overflow:hidden;width:100%;所以頁面寬度超出部分隱藏了,再結(jié)合我測試的第一張圖,頁面寬度是393px,1rem=45.1875px,那10rem就超出了頁面寬度。事實確實如此,如果設(shè)置頁面寬度10rem,頁面會出現(xiàn)橫向滾動條。
??解決方法也很簡單,因為這類異常手機html的style.fontSize、html最終的fontSize和頁面元素1rem的值都不相等,但是1rem和html的最終fontSize很接近。代碼如下

/*
* 適用于獲取屏幕寬度等分設(shè)置html的font-size情況,比如 flexible.js庫
*/
//計算最終html font-size
function modifileRootRem () {
    var root = window.document.documentElement;
    var fontSize = parseFloat(root.style.fontSize);
    var finalFontSize = parseFloat(window.getComputedStyle(root).getPropertyValue("font-size"));
    if(finalFontSize === fontSize) return;
    root.style.fontSize = fontSize+(fontSize-finalFontSize) + "px";
}
if(typeof window.onload === 'function'){
    var oldFun = window.onload;
    window.onload = function(){
        oldFun();
        modifileRootRem();
    }
}else{
    window.onload = modifileRootRem;
}

通過docElementFontSize+(docElementFontSize - finalDocElementFontSize) 得到html.fontSize的值。適用這類特異機型的html.fontSize!

這個問題我特意問了下大漠老師,大佬只是說進行“特定”處理,看淘寶首頁的情況也沒做好很好的兼容,不出意外,我這是針對這類機型rem布局兼容的首創(chuàng)代碼!
如有疑問歡迎評論討論

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容