【原創】Chrome最新版(53-55)再次爆出BUG!

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

前言

今年十月份,我曾發布一篇文章《Chrome53 最新版驚現無厘頭卡死 BUG!》,不過那個BUG在最新的 Chrome 54 中已經修正。

?

而今天即將發布的Chrome弱智BUG:

  • 僅 Chrome 53 - Chrome 55(2016-12-05發布的)中存在問題
  • 國內雙核瀏覽器?Chrome 45 中沒有問題
  • Firefox,Edge,IE11-IE8瀏覽器中都沒有問題

?

發現問題

最近在和客戶溝通中,發現一個奇怪問題:

1. 頁面中存在一個選項卡控件,選項卡里面是IFrame,頁面初始顯示時有縱向滾動條出現

2. 來回切換選項卡一次,原來選項卡頁面的滾動條居然消失了!!

3. 奇怪的時,此時在選項卡頁面內滑動鼠標滾輪,還是能夠上下滾動頁面的

?

頁面打開時的樣子:

?

來回切換一次選項卡后的樣子:

?

奇怪的是,此時鼠標滾動還能上下滾動頁面:

?

當然首先懷疑的就是自己寫的代碼問題,但是查了一遍居然毫無頭緒。在此期間我們還發現如下問題:

1. FineUIPro從最新版v3.3,到之前v3.2,v3.1,v3.0.... 無一例外都有這個問題。這就有點不可思議了,我們開源版有 1300 多位捐贈用戶,專業版有 100 多個企業客戶,如此明顯的一個BUG不可能這么多版本都沒有被發現!!

假設之前的版本根本就沒有這個問題,那么就是瀏覽器版本升級引入的BUG了。

2. 在Firefox,Edge,IE11,IE10,IE9,IE8下測試都沒有這個問題,只有Chrome下才出現問題!!

?

由于,我們不得不懷疑是新版 Chrome 引入的BUG,為了驗證這個想法,我們需要一個非常簡單的可重現例子。

?

驗證問題

由于FineUIPro本身的客戶端代碼還是很復雜了,為了避免其他代碼的影響,我們需要一個可重現的簡單的例子:

頁面一:

<!DOCTYPE html>
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title></title>
</head>
<body><input type="button" value="頁面二" οnclick="document.getElementById('frame1').style.display = 'block'; document.getElementById('frame2').style.display = 'none';" /><input type="button" value="頁面三" οnclick="document.getElementById('frame1').style.display = 'none'; document.getElementById('frame2').style.display = 'block';" /><div style="border:solid 1px red;width:400px;height:200px;"><iframe id="frame1" style="width:100%;height:100%;border:none;" src="./page2.html"></iframe><iframe id="frame2" style="width:100%;height:100%;border:none;display:none;" src="./page3.html"></iframe></div>
</body>
</html>

這個頁面代碼非常簡單,兩個按鈕,兩個IFrame,默認顯示第一個IFrame,通過按鈕來切換兩個IFrame的顯示。

?

頁面二:

<!DOCTYPE html>
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title></title>
</head>
<body>page2
</body>
</html>

頁面三:

<!DOCTYPE html>
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title></title>
</head>
<body>page3<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />page3
</body>
</html>

?

下面分別在不同瀏覽器下運行效果:

Chrome?55.0.2883.75

FireFox 50.0.2

Edge

?

IE11

毫無疑問,這個是Chrome的BUG,那么到底是從哪個版本開始才出現的呢,這個就不好追蹤。

?

我們也沒有那么多精力把每個Chrome版本都測試下,所以就安裝了兩款國內的雙核瀏覽器,分別用Chrome內核測試:

第一款產品是 360安全瀏覽器,極速模式下 Chrome 版本是 45,比較老,正好用來測試:

?

哈哈,看來 Chrome v45 還沒有這個BUG,這就好辦,說明這個BUG是Chrome新版才引入的!!

?

第二款產品是 QQ 瀏覽器,Chrome內核是 53

?

看來 Chrome 53 版本已經引入了這個BUG。

?

所以我們可以大致把引入這個BUG的Chrome版本限定在 v53 - v55(這個是2016-12-05 才發布的)。

?

解決問題

既然那么多Chrome版本都存在這個問題,要么是Google開發人員沒發現,要么是不想修正了。

?

這里也順便吐槽一下Chrome:雖然Chrome的運行速度最快,開發工具也非常方便,但是長期堅持在JavaScript編碼第一線,居然發現了好多個僅在Chrome下出現的問題,讓人恍惚有點IE6的感覺。僅僅是在 FineUIPro 就有好幾處是 Chrome Only 的代碼,有空我會再分享幾個出來。

?

不管Google怎么辦,這個問題還是要解決,又要是 Chrome Only 的代碼了,哎!

?

1. 首先懷疑是 iframe 的 width:100% 和 height:100% 搞的鬼

由于代碼結構太簡單,沒有多少讓人懷疑的地方,就先把這個寬度和高度改為固定值試下:

頁面四:

<!DOCTYPE html>
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title></title>
</head>
<body><input type="button" value="頁面二" οnclick="document.getElementById('frame1').style.display = 'block'; document.getElementById('frame2').style.display = 'none';" /><input type="button" value="頁面三" οnclick="document.getElementById('frame1').style.display = 'none'; document.getElementById('frame2').style.display = 'block';" /><div style="border:solid 1px red;width:400px;height:200px;"><iframe id="frame1" style="width:400px;height:200px;border:none;" src="./page2.html"></iframe><iframe id="frame2" style="width:400px;height:200px;border:none;display:none;" src="./page3.html"></iframe></div>
</body>
</html>

?

運行一下,問題依舊!

?

這時如果用Chrome調試工具查看,發現滾動條的位置還在,只是不顯示:

?

2. 之前遇到類似的問題,我們可以強制瀏覽器重新渲染

網絡上早已有相應的解決版本:查看StackOverflow上相關的技術帖子

頁面五:

<!DOCTYPE html>
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title></title>
</head>
<body><script>function fixSize() {var container1 = document.getElementById('container1');container1.style.overflow = 'hidden';container1.scrollWidth;container1.style.overflow = 'auto';}</script><input type="button" value="頁面二" οnclick="document.getElementById('frame1').style.display = 'block'; document.getElementById('frame2').style.display = 'none'; fixSize();" /><input type="button" value="頁面三" οnclick="document.getElementById('frame1').style.display = 'none'; document.getElementById('frame2').style.display = 'block'; fixSize();" /><div style="border:solid 1px red;width:400px;height:200px;" id="container1"><iframe id="frame1" style="width:400px;height:200px;border:none;" src="./page2.html"></iframe><iframe id="frame2" style="width:400px;height:200px;border:none;display:none;" src="./page3.html"></iframe></div>
</body>
</html>

?

運行,問題依舊!

?

怪了,這個強制Chrome重新渲染的代碼之前驗證過的,這次居然也不行了。

?

郁悶中。。。。。先出去散步。。。。。。

散步中。。。。

散步中。。。。

散步中。。。。

散步中。。。。

散步中。。。。

散步中。。。。

散步中。。。。

散步中。。。。

散步中。。。。

散步中。。。。

散步中。。。。

散步中。。。。

散步中。。。。

散步中。。。。

散步中。。。。

散步中。。。。

散步中。。。。

散步中。。。。

散步中。。。。

散步中。。。。

?

3. 散步回來,覺得還是應該從強制Chrome渲染入手,這次我們來改變高度

頁面六:

<!DOCTYPE html>
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title></title>
</head>
<body><script>function fixSize() {var container1 = document.getElementById('container1');container1.style.height = '199px';container1.scrollWidth;container1.style.height = '200px';}</script><input type="button" value="頁面二" οnclick="document.getElementById('frame1').style.display = 'block'; document.getElementById('frame2').style.display = 'none'; fixSize();" /><input type="button" value="頁面三" οnclick="document.getElementById('frame1').style.display = 'none'; document.getElementById('frame2').style.display = 'block'; fixSize();" /><div style="border:solid 1px red;width:400px;height:200px;" id="container1"><iframe id="frame1" style="width:100%;height:100%;border:none;" src="./page2.html"></iframe><iframe id="frame2" style="width:100%;height:100%;border:none;display:none;" src="./page3.html"></iframe></div>
</body>
</html>

?

帥呆了,這次居然可以了!!!現在Chrome 55下能正常運行了。

?

4. 優化一下,可以改變iframe的高度,而不是外部容器的高度,這樣就不用硬編碼了,代碼更通用

頁面七:

<!DOCTYPE html>
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title></title>
</head>
<body><script>function fixSize(iframeId) {var iframe = document.getElementById(iframeId);iframe.style.height = '99%';iframe.scrollWidth;iframe.style.height = '100%';}</script><input type="button" value="頁面二" οnclick="document.getElementById('frame1').style.display = 'block'; document.getElementById('frame2').style.display = 'none'; fixSize('frame1');" /><input type="button" value="頁面三" οnclick="document.getElementById('frame1').style.display = 'none'; document.getElementById('frame2').style.display = 'block'; fixSize('frame2');" /><div style="border:solid 1px red;width:400px;height:200px;" id="container1"><iframe id="frame1" style="width:100%;height:100%;border:none;" src="./page2.html"></iframe><iframe id="frame2" style="width:100%;height:100%;border:none;display:none;" src="./page3.html"></iframe></div>
</body>
</html>

?

這樣也行,也算是解決了這個Chrome Only的BUG!!

?

后記

每次給老婆說起這樣的稀奇古怪事,老婆都會嘲笑我是代碼泥瓦匠,只能從外部修修補補。不過能修補上也算是阿彌陀佛了。

?

誰讓咱一直堅持在代碼一線呢。

?

在線演示

頁面一(原始頁面,Chrome下存在BUG):http://fineui.com/demo_pro/chromebug1/page1.html

頁面四(仍然有問題):http://fineui.com/demo_pro/chromebug1/page4.html

頁面五(仍然有問題):http://fineui.com/demo_pro/chromebug1/page5.html

頁面六(修正了Chrome下的問題):http://fineui.com/demo_pro/chromebug1/page6.html

頁面七(修正了Chrome下的問題):http://fineui.com/demo_pro/chromebug1/page7.html

?

轉載于:https://my.oschina.net/iamsanshi/blog/801252

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/397225.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/397225.shtml
英文地址,請注明出處:http://en.pswp.cn/news/397225.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ThinkPHP 發送post請求

function post($url, $paramarray()){ if(!is_array($param)){ throw new Exception("參數必須為array"); } $httph curl_init($url); curl_setopt($httph, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($httph, CURLOPT_SSL_VERIFYHOST, 1); curl_setopt($httph,CURLOP…

vue 打包路由報錯_Vue下路由History模式打包后頁面空白的解決方法

vue的路由在默認的hash模式下,默認打包一般不會有什么問題,不過hash模式由于url會帶有一個#,不美觀,而且在微信分享,授權登錄等都會有一些坑.所以history模式也會有一些應用場景.新手往往會碰到history模式打包后頁面一片空白的情況,而且沒有資源加載錯誤的報錯信息.這個其實仔…

leetcode-回文鏈表

請判斷一個鏈表是否為回文鏈表。 示例 1: 輸入: 1->2 輸出: false 示例 2: 輸入: 1->2->2->1 輸出: true進階&#xff1a;你能否用 O(n) 時間復雜度和 O(1) 空間復雜度解決此題&#xff1f; 思路&#xff1a;先遍歷鏈表&#xff0c;獲得長度。 把前半部分的鏈表逆置…

進程kswapd0與events/0消耗大量CPU的問題

http://www.nowamagic.net/librarys/veda/detail/2539 今天下午網站宕了兩次機&#xff0c;發工單給阿里云&#xff0c;發現原因是服務器的CPU 100%了。 重啟服務器后&#xff0c;使用 top 命令看看是哪些進程消耗那么大的 CPU 使用。盯了有好十幾分鐘&#xff0c;主要消耗 CPU…

索引器

namespace _03{ class Program { //請編寫一個類&#xff1a;ItcastClass,該類中有一個私有字段_names,數據類型為&#xff1a;字符串數組&#xff0c;長度為5&#xff0c;并且有5個默認的姓名。 //要求&#xff1a;為ItcastClass類編寫一個索引器&#xff0c;要求該索引器能夠…

跑三小時的monkey測試該怎么算_淺談App測試(下)~帶音頻

文 | Vicky采編&#xff5c;Emily淺談App測試(上)&#xff5e;帶音頻一、功能測試?二、性能測試(1)耗電量影響因素&#xff1a;定位、傳感器、藍牙&#xff0c;其中CPU、持續定位是兩個平臺造成耗電的主要因素。(2)流量也就是常說的耗流量&#xff0c;影響因素有重復請求&…

Flask基礎(03)--創建第一個Flask程序

# 導入Flask from flask import Flask# 創建Flask的應用程序 # 參數__name__指的是Flask所對應的模塊&#xff0c;其決定靜態文件從哪個地方開始尋找 app Flask(__name__,static_url_path/static, # 靜態文件的訪問路徑&#xff0c;默認為/staticstatic_folderstatic, # 靜態…

2016-2017-2 《Java程序設計》課程學生博客和代碼托管鏈接

2016-2017-2 《Java程序設計》課程學生博客和代碼托管鏈接 博客 1552 20155201 李卓雯20155202 張 旭20155203 杜可欣20155204 王 昊20155205 郝博雅20155206 趙 飛20155207 王雪純20155208 徐子涵20155209 林虹宇20155210 潘瀅昊20155211 解雪瑩20155212 江振思20155213 陸忠民…

C++快速排序

快速排序作為排序家族里面最為快捷的方式&#xff0c;值得思考。我們將一個數組中的某一個數定為基點&#xff0c;然后通過快速排序按照需求&#xff08;假設升序&#xff09;&#xff0c;將比基點小的數丟在基點左邊&#xff0c;把比基點大的數丟在基點右邊這樣來將基點數的正…

回顧一年的工作歷程_【設備管理公司】召開20202021年度總結計劃表彰暨工作述職會議...

點擊上方藍字關注我們2020年即將過去&#xff0c;為了總結2020年各項工作開展情況&#xff0c;同時做好2021年工作計劃與部署&#xff0c;2020年12月30日-31日&#xff0c;設備管理公司組織召開了2020-2021年度總結計劃表彰暨工作述職會議。公司領導、各部門經理、部門主管、車…

注冊驗證的時候一直出現的報錯問題,終于解決了

今天再注冊驗證表單的時候一直報錯&#xff0c;但是什么都沒有改&#xff0c;就報錯了&#xff0c;后面才知道原來是和我上次上傳圖片的時候&#xff0c;導入的2個js的順序有關系的&#xff0c; 45行和41行互相換一下位置就好了 轉載于:https://www.cnblogs.com/likeji/p/61433…

重排序

一、重排序。 1、為什么需要重排序&#xff1f; 現在的CPU一般采用流水線來執行指令。一個指令的執行被分成&#xff1a;取指、譯碼、訪存、執行、寫回、等若干個階段。然后&#xff0c;多條指令可以同時存在于流水線中&#xff0c;同時被執行。 指令流水線并不是串行的&#x…

tableau三軸該怎么做_如何用tableau繪制城市地鐵線路圖?

在用tableau繪制地鐵線路圖之前&#xff0c;當然是要獲取相關的數據啦我們以鄭州目前已開通的地鐵為例&#xff0c;分別是1、2、5號線經度、維度可在 網頁上自行搜索哦&#xff08;以谷歌地圖為準&#xff09;有了這些下面我們就要開始啦將Excel中你所需要的數據直接導入到tabl…

JS七種加密解密方法

HTML或JS加密解密 本文一共介紹了七種方法&#xff1a;   一&#xff1a;最簡單的加密解密   二&#xff1a;轉義字符"\"的妙用   三&#xff1a;使用Microsoft出品的腳本編碼器Script Encoder來進行編碼 &#xff08;自創簡單解碼&#xff09;  …

提高solr的搜索速度

之前是使用12臺機分布式搜索&#xff0c;1臺為主機做索引并分發給子機&#xff0c;8臺做大索引搜索服務&#xff0c;3 臺做小索引搜索服務&#xff0c;配置基本是內存在4-8G&#xff0c;cpu:2-8core的服務器&#xff0c;索引的大小為8G。搜索的響應時間 是150ms左右。&#xff…

哲學到編程:思想的實例化

萬古長江水&#xff0c;千年儒釋道。歷史的長流中&#xff0c;蕓蕓眾生&#xff0c;參差不齊&#xff0c;但總是能夠總結出一個“生旦凈末丑”來。儒、釋、道&#xff0c;五千年的中華文化&#xff0c;卻總是圍繞著這三種主流思想交相演繹。千年間&#xff0c;豪士俊杰&#xf…

python 字符串交集_Python序列--集合(set)

集合集合用于保存不重復元素。- 集合和列表非常相似- 不同點&#xff1a;1.集合中只能存儲不可變對象2.集合中存儲的對象是無序(不是按照元素的插入順序保存)3.集合中不能出現重復的元素集合的所有元素都放在一對”{ }” 中&#xff0c;兩個相鄰的元素之間用”,”分隔。集合最好…

mysql binlog日志查看及解碼

mysql bin log日志導出 mysqlbinlog mysql-bin.000005 > /home/17bin.log 需要添加參數&#xff08;--base64-outputdecode-rows -v&#xff09;對輸出結果解碼 mysqlbinlog --base64-outputdecode-rows -v mysql-bin.000005 > /home/17bin.log轉載于:https://www.cnbl…

【Python開發】Python的GUI用法總結

引用模塊&#xff08;tkinter&#xff09;&#xff1a; 1 from tkinter import * 主窗口設置&#xff1a; 1 # 主窗口 2 tk Tk() # 主窗口實例化 3 tk.title("文本處理工具") # 主窗口標題 4 tk.geometry("700x4001001…

JAVA 環境變量配置

JAVA 環境變量配置 1. 安裝JDK 2.配置系統變量 新建          JAVA_HOME&#xff1a;D:\Program Files\Java\jdk1.8.0_65 Path添加       %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; 新建CLASSPATH  .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar; 3.完成…