自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

原來CSS這樣寫是會讓App崩潰的

開發(fā) 前端
不過當(dāng)時(shí)我好像使用的是 transition,并且當(dāng)時(shí)主要是考慮 Firefox,所以也沒遇到什么問題。印象中遇到的問題就是,好像在某個(gè)瀏覽器中并沒看到那個(gè) transition 效果,而且這個(gè)只是作為一個(gè)小“亮點(diǎn)”的存在,產(chǎn)品經(jīng)理也沒砍我。想想也算萬幸的

先廢話一下

之前在自己的個(gè)人公眾號中提到了一篇利用 CSS 的方式進(jìn)行 XSS 攻擊,當(dāng)時(shí)有朋友跟我說,讓我去獲取那個(gè)網(wǎng)站的 cookie,再然后進(jìn)入那個(gè)網(wǎng)站的后臺去玩。然而,技術(shù)能力實(shí)在有限,搞不了這些東西,只是覺得那個(gè)網(wǎng)站沒有適當(dāng)過濾 HTML 標(biāo)簽是一件很危險(xiǎn)的事情。

不過今天要說的 CSS 代碼真的是讓 app 崩潰了,至于信不信,看圖就知道咯。

crash-app-by-css-01

故事背景

昨晚在被窩中的我突然收到一封郵件,大概內(nèi)容是說因?yàn)?CSS 的問題讓 app 掛了。當(dāng)時(shí)在想,怎么樣的 CSS 如此牛逼,居然讓 app 掛了!于是掏出手機(jī)按照郵件中提示的 URL 打開看了一下,我只想說,這代碼,額,算了,還是不吐槽了,其實(shí)要是我寫的話,肯定會更爛。

雖然是來自其他部門的一個(gè)頁面,但作為公司的一員,怎么能不為公司的產(chǎn)品考慮呢。聽起來感覺像是在拍馬屁,其實(shí)真的是,因?yàn)槲易詈闷娴氖浅霈F(xiàn) bug 的原因是什么,當(dāng)然,肯定也是關(guān)心產(chǎn)品的啦。

于是第二天一早就到公司開始排雷……

大概的過程

首先我仔細(xì)看了一下代碼,從最初懷疑是 animation 的性能影響低端設(shè)備運(yùn)行開始排查。結(jié)果發(fā)現(xiàn)這個(gè)所謂的性能問題其實(shí)也并沒那么厲害,一時(shí)也找不到頭緒,然后源文件又不是在我們自己這邊,只好打開花瓶抓 CSS 文件,然后替換后,用刪除法一點(diǎn)點(diǎn)查。

最后在儲大師的提點(diǎn)以及提供的一個(gè) URL 來看,居然是 rem 導(dǎo)致的。

https://bugs.chromium.org/p/chromium/issues/detail?id=364222

這個(gè)網(wǎng)址大家應(yīng)該都知道,是專門看 bug 的,當(dāng)然,也可以提 bug 啦。

@-webkit-keyframes crashChrome {
        0%{ -webkit-transform: translateX(0rem);}
}
.anim:before{
    content: "";
    width: 3rem;
    height: 3rem;    
    border-radius: 3rem;    
    position: absolute;    
    left:5rem;    
    top: 5rem;        
    background-color: #06839f;        
    -webkit-animation: crashChrome;
}
<div class="anim"></div>

剛開始看到這段 CSS 代碼的時(shí)候,我在想啊,這個(gè)好像也沒什么問題啊,不就是通過 :before 這個(gè)偽元素來做一個(gè) animation動畫效果么,然后使用了 rem 這個(gè)單位量。

反正是百思不得其解。

還是找測試機(jī),繼續(xù)刪除那個(gè)有問題的頁面代碼吧。先是用了三星的,發(fā)現(xiàn)沒問題,接著用了小米的,果然奔潰了??戳艘幌掳姹?,三星的是 Android 4.4.2,小米的是 Android 4.4.4,難道是版本的關(guān)系?

[[180763]]

總之,在最開始那塊有動畫效果的部分排查了很久都沒找到問題。最后還是回到那個(gè)已經(jīng)報(bào)了 bug 的頁面上看具體說明。

突然想到,這個(gè)頁面中用了 :before 來做動畫,莫非我們的這個(gè)頁面中也有,于是一搜,結(jié)果,真的有!

趕緊我們自己頁面上的這段代碼拿過來做嘗試,終于找到你了。趕緊回郵件告訴對方……

再次感謝儲大師的提點(diǎn),讓我有機(jī)會了解到未曾了解到的一個(gè)問題。

簡單分析

這個(gè) bug 在目前桌面端的設(shè)備中已經(jīng)被處理掉了,按照 bug list 頁面上說的,當(dāng)時(shí)發(fā)現(xiàn)這個(gè) bug 是在

Chrome Version: 34.0.1847.116 (Official Build 260972) m

這個(gè)版本上的,并且各系統(tǒng)都有。然而,現(xiàn)在的 Chrome 都已經(jīng)是 50 以上的版本了,所以桌面端完全不需要去擔(dān)心了。

但是這次既然是在移動端上遇見了,而且是 Android 4.4.4 這個(gè)版本,雖然是在小米3 中發(fā)現(xiàn),但 Android 4.4.4 這個(gè)版本應(yīng)該還算是比較普遍的,難道真的會是這個(gè)問題。

crash-app-by-css-03

獲取一下這個(gè) webview 的 UA 信息,看到其中有一個(gè)是 Chrome/33.0.0.0 Mobile Safari,于是我想啊,可能應(yīng)該就是這個(gè) webview 的關(guān)系了,畢竟我在小米3 這臺測試機(jī)上的各個(gè)瀏覽器里都看了一遍,沒發(fā)現(xiàn)問題。

嘗試了解

現(xiàn)在是知道 rem 和 animation 一起的時(shí)候回出現(xiàn)這個(gè) bug,但是在其他元素中并沒有問題啊。出于自己的好奇心,于是又換了幾個(gè)方式來嘗試。

animation 換 transition

把 animation 換成 transition,并且也是通過改變有 rem 的屬性,結(jié)果發(fā)現(xiàn)這個(gè)想法的結(jié)果是,沒有任何問題。

放棄這個(gè)想法……

:before 是偽元素

想到 :before 是偽元素,那么對于偽元素的選擇符還有幾個(gè),都嘗試一下看看。

[[180764]]

:這個(gè)截圖是曾經(jīng)個(gè)人整理的有關(guān) CSS 選擇符的一張圖

結(jié)果發(fā)現(xiàn)這四個(gè)偽元素選擇符全部都會讓頁面崩潰……

小結(jié)一下

瀏覽器(webview)的底層渲染機(jī)制我不懂,但就目前來看,可能應(yīng)該就是因?yàn)?nbsp;Chrome/33.0.0.0 Mobile Safari 這個(gè)版本的問題,如果在偽元素中使用 animation,并且改變了其中的 rem 的值就會出現(xiàn)頁面崩潰的問題。

所以,可能應(yīng)該就是這樣:

  • 使用了 :before 等偽元素中的其中一個(gè)來做 animation 動畫;
  • 在 animation 動畫改變了其中的某個(gè) rem 的值;

在這樣的前提下,又是使用有這個(gè) bug 的版本瀏覽器,那么就會讓頁面崩潰。

如果要避免這個(gè) bug 的出現(xiàn),那么應(yīng)該是:

  • 換一個(gè) webview,高版本的應(yīng)該會好一些;
  • 在偽元素中使用 animation 動畫時(shí),不用 rem 單位;

不過好像現(xiàn)在大家都會去用 rem 單位,然后也會去用 animation 做動畫,那這樣好了,不在偽元素上使用者兩樣?xùn)|西咯。

題外話

說到在偽元素上使用動畫,我想起了幾年前自己在做國際網(wǎng)站的時(shí)候,當(dāng)時(shí)好像用的比較多的是 Firefox,然后在往返程的一個(gè)模塊中,就是用了偽元素的方式。

不過當(dāng)時(shí)我好像使用的是 transition,并且當(dāng)時(shí)主要是考慮 Firefox,所以也沒遇到什么問題。印象中遇到的問題就是,好像在某個(gè)瀏覽器中并沒看到那個(gè) transition 效果,而且這個(gè)只是作為一個(gè)小“亮點(diǎn)”的存在,產(chǎn)品經(jīng)理也沒砍我。想想也算萬幸的……

哦,還有,如果各位已經(jīng)知道了這個(gè) bug,也請不要嘲笑我,我真的是第一次知道,平時(shí)日常中很少這樣去寫樣式。-_”

責(zé)任編輯:張燕妮 來源: linxz
相關(guān)推薦

2017-01-16 13:34:21

2021-11-10 09:45:06

Lambda表達(dá)式語言

2022-07-13 10:37:59

服務(wù)器故障優(yōu)化

2022-05-09 08:37:43

IO模型Java

2020-06-08 17:35:27

Redis集群互聯(lián)網(wǎng)

2022-12-14 07:32:40

InnoDBMySQL引擎

2022-01-12 19:59:19

Netty 核心啟動

2009-03-11 14:42:57

面試求職案例

2023-05-08 07:52:29

JSXReactHooks

2024-12-17 12:00:00

C++對象模型

2018-04-02 15:13:21

網(wǎng)絡(luò)

2024-04-30 08:22:51

Figma圖形編輯變換矩陣

2023-02-15 08:17:38

2025-02-17 09:22:16

MySQLSQL語句

2024-02-06 09:30:25

Figma矩形矩形物理屬性

2022-05-05 08:55:12

工業(yè)物聯(lián)網(wǎng)IIoT

2023-05-22 15:58:11

2018-01-22 10:52:43

前端CSS追蹤用戶

2020-05-26 08:52:36

Java JVM多態(tài)

2020-11-24 06:20:02

Linux日志文件系統(tǒng)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號