Chromeの疑似クラス「:has()」がjQueryの「:has()」に悪影響を及ぼす問題が解決へ。Chromeは回避策実装、jQueryは新バージョンで対応
8月にリリースされたChrome 105で実装されたCSSの疑似クラス「:has()」が、jQueryに以前から備わっている「:has()」に悪影響を及ぼし、一定の条件下ではjQueryを使ったWebサイトが壊れるなどの問題を引き起こすことがあることを、9月の下記の記事で紹介しました。
参考:Chromeに実装された疑似クラス「:has()」がjQueryの「:has()」に悪影響、一定の条件下でWebサイトが壊れる可能性
その後、Chrome側ではこの問題に対応する回避策が実装され、一方のjQuery側でも先日リリースされたjQuery 3.6.2で対応が行われたことが明らかになりました。
Chrome、jQueryそしてCSS WGがそれぞれ対応
Chrome側での回避策は、「Issue 1358953: :has pseudo-class breaks jQuery custom selectors」で提起され、M107ビルドで修正されたと報告されています。
回避策についての議論を追っていくと、「:has() 」の引数がないときには無効(invalid)とする、という修正が行われたようです。これで完全ではないものの大半のケースで問題が解消される見通しとされています(Chrome 107が10月にリリース済みなので、すでにこの修正が入っているはず)。
またCSSワーキンググループのこの点について議論し、以下の解決を見たと報告されています(下記の結論は、Chromeの回避策である「:has()」を無効にするのとほぼ同様のこと(hasをunforgivingにする)を仕様にする、という意味だと理解しましたが、ちょっと自信がありません……)。
RESOLVED: Make has unforgiving RESOLVED: Limit forgiving behavior to :is and :where and remove it everywhere else
そして12月13日にリリースされたjQuery 3.6.2でも、この:hasの悪影響に対応した修正が行われました。
jQuery 3.6.2 :has arrived! https://t.co/zcLcTUfW8H
— jquery (@jquery) December 13, 2022
jQuery 3.6.2の対応によって、以前のChromeであっても問題が発生しないようになったため、既存のjQueryを利用しているWebサイトがあれば、最新のjQueryへ入れ替えることを検討されてはいかがでしょうか。
あわせて読みたい
Mozilla、分散型ソーシャルネットワークのテストインスタンスを2023年前半に立ち上げると宣言
≪前の記事
GitHub、無料のパブリックリポジトリユーザーにも、コード内のシークレットを検知してくれる「Secret scanning」を無料提供へ