なんでもノート

なんでも書くノートみたいなブログ

続・WebP対応ブラウザを判定する

WebP対応ブラウザかサーバーサイドで判定する - なんでもノートでWebP対応ブラウザをサーバーサイドで判定する方法を調べた。Acceptヘッダーに image/webp が含まれているかどうかで判定する方法をまとめた。

これ以外にUser-Agentで判定する方法がある。WebP image format | Can I use... Support tables for HTML5, CSS3, etcでWebPをサポートしているブラウザを確認し、文字列比較で判定する。ユーザエージェント文字列のパースの手間があるし、仕様をしっかり把握していないので個人的には正直やりたくない。

クライアントサイドで判定する方法はこれまたWebサービス上の画像変換とWebPの利用について | メルカリエンジニアリングにあった。

以下のように1px四方のWebP画像をJavaScript経由で書き込んでみて、画像として認識されるかを確認します。もし画像として認識されれば画像サイズが取得できるはずです。 javascript var img = new Image(); img.src = 'data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA'; console.log(img.witdh); // 1

ChromeのConsoleで実行してみたところ、1が出力された。

また、WebP – Webを速くするためにGoogleがやっていること Make the Web Faster 01 – | HTML5Experts.jpによると、以下の方法もあった。

まず、Modernizr.jsには、ブラウザのWebPサポートを調べる機能があります。 これを用いて、読み込む画像をJavaScriptで動的に切り替えることができます。 if (Modernizr.webp) { // WebP を読み込む } else { // PNG を読み込む }

Modernizr.jsというライブラリを使えば簡単に判定できそうだった。GitHub - Modernizr/Modernizr: Modernizr is a JavaScript library that detects HTML5 and CSS3 features in the user’s browser.

https://github.com/Modernizr/Modernizr/blob/master/feature-detects/img/webp.jsを見ると、おそらくModernizr.jsも同じ方法でWebP対応判定をしているようだった。