≪ Today I learned. RSS購読
公開日
タグ
HTML , JavaScript
著者
ダーシノ(@bc_rikko)

ブログにブラウザの対応状況を表示する

当ブログでは、一部ブラウザでしか使えないような機能を取り扱うことがある。

毎回「対応状況: Chrome123, Edge, Safari, Firefox」みたいなことを書いていたのだが、手動で更新し続けるには限界がある。そこで、W3C WebDX Community Groupが公開しているbaseline-statusというWeb Componentsを使用する。

使用イメージは以下のような感じだ。

baseline-statusの使い方

npm を使う場合

npmでbaseline-statusをインストールする。

$ npm install -S baseline-status

パッケージ内部でwindow.customElements.define('baseline-status', BaselineStatus);のようにカスタム要素に登録しているので、使用者はそのままimportするだけでよい。

import 'baseline-status';
<baseline-status featureId="abs-sign" />

CDN を使う場合(非推奨)

テストやプロトタイピングでは良いが、プロダクトで使用する場合は、パッケージ重複が排除できなかったり、複数バージョンのlitが読み込まれたりするので、注意が必要。

<script src="https://cdn.jsdelivr.net/npm/baseline-status@latest/baseline-status.min.js" type="module"></script>
<baseline-status featureId="abs-sign"></baseline-status>

SSR/SSGでで使う場合(Astro.jsの場合)

baseline-statusにはHTMLElementが使われているので、SSR(Server-Side Rendering)やSSG(Static Site Generator)ではエラーになることがある

当ブログで使っているAstro.jsを例に紹介する。

BaselineStatusコンポーネントの作成

クライアントサイドだけで読み込み・実行したいので、ダイナミックインポートを使って読み込んでいる。

$ npm install -S baseline-status
// components/BaselineStatus.astro

---
interface Props {
  featureId: string;
}

const { featureId } = Astro.props;
---

<script>
  // クライアントサイトで読み込みたいので、Dymamic Importを使う。
  import("baseline-status");
</script>

<baseline-status featureId={featureId}></baseline-status>

BaselineStatusの使用

// {page}.mdx
import Baseline from './path/to/components/BaselineStatus.astro'

<Baseline featureId={"abs-sign"} />

featureIdの指定をする

最後に、featureIdを指定する必要があるのだが、webstatus.devweb-platform-dx/web-featuresリポジトリで検索するのが良いだろう。

検索後のURLにあるwebstatus.dev/features/{featureId}の部分をfeatureIdとして指定する。

webstatus.devでfeatureIdを検索している様子。