同じサイトを 3 つのアカウントで開くと、タブが全部同じ名前になります。7 月に公開した v0.1.0 は、そこに Firefox のコンテナ名を差し込むだけの拡張でした。v0.2.0 では URL ルールを足し、SPA での追随を作り直し、コンテナ名の変更が開いているタブへ届くようにしています。直した 3 つのうち 2 つは、動いていると思っていたコードが最初から効いていなかった話でした。
content script は、ページとは別の isolated world で動きます。だからそこで history.pushState を自前の関数で包んでも、ページ側の JavaScript が呼ぶ history.pushState は元のままです。v0.1.0 で SPA に追随できているように見えていたのは、遷移のときに document.title も書き換わって MutationObserver が反応していたからでした。タイトルを変えない遷移では、そもそも追随していません。差し替えをやめて、前回の URL と location.href を比べるだけにしたら、行数は減って動く範囲は広がりました。
もう 1 つは、ブラウザ判定です。typeof chrome !== "undefined" で Chrome を判定していましたが、Firefox も互換のために chrome グローバルを定義します。判定は「どちらが定義されていないか」で分けるのが安全でした。
記事全体の要約。v0.2.0 で足した機能と、効いていなかった 2 か所の直し方。
v0.1.0 はコンテナ名だけ。v0.2.0 からは URL ルールのプレフィックスがコンテナ名の後ろに連結されます(画像は合成データの例で、実サイト名は使っていません)。
提出ボタンを押した直後。今回は審査待ちを経ずに公開されました。