Chrome:升級73後input內click事件的行為變更(異常?),與其他瀏覽器的行為比較

  • 977
  • 0

chrome日前升級到73,當大家都在感恩dark mode德政同時,那種一般很難發現的問題又被我們的使用者測出來了....


今天收到一個問題:

我們使用ngx-bootstrap的modal元件,並且在modal內放了一個text的input。

打開modal後,input內按下滑鼠左鍵不放,然後滑鼠移動到灰色的modal container放開。

在chrome 73.0.3683.75(目前最新版)下,modal會被自動關閉。

但是同樣的行為在前一版的chrome 72中並不會自動關閉。

最新的火狐和edge也不會自動關閉。

測試網址:https://angular-5w6npg.stackblitz.io/

chrome 72 portable下載地址:https://www.chrome64bit.com/index.php/chrome-64-bit-portable


會發現這個問題

是有人在input裡面輸入文字,想要用滑鼠把文字選取起來

但是選取的時候不小心滑到modal外面才放開

雖然其實在input內點兩下可以選取全部文字

或者選取的時候精確一點就可以避免這樣的問題

不過原因還是要找出來


用chrome開發者工具監看source的event listener來偵錯

發現ngx-bootstrap的ModalContainer元件的onClick方法被觸發,接著觸發關閉modal的程式

因此猜測問題是不是出在瀏覽器對於input的click事件的行為不一樣

寫了一個簡單的測試網頁:https://codepen.io/anon/pen/YgJQZa

在這個網頁中有一個背景藍色的div,裡面有一個input

input和div都加了click事件,觸發的話會在console中印出文字

在input內按下滑鼠左鍵不放,移動滑鼠到input外面藍色的div區域

  • chrome 73:不會觸發input的click事件,會觸發div的click事件
  • chrome 72:不會觸發input的click事件,不會觸發div的click事件
  • firefox 66  :    會觸發input的click事件,不會觸發div的click事件
  • edge 42    :不會觸發input的click事件,不會觸發div的click事件

結果各瀏覽器對於同樣操作行為的處理還真的不一樣

但是chrome從72到73為什麼突然就變更行為的處理方式,目前還沒找到原因


回頭測試原始的Bootstrap Modal

發現不管在上述哪個瀏覽器,用同樣的操作行為都不會導致modal被關閉

測試網址:https://codepen.io/anon/pen/wOYJMK

所以問題看起來應該是出在ngx-bootstrap裡面modal元件的click事件處理

要解決這個問題也要花點時間,只好等比較有空的時候再檢討解決方式了