Firefox を CDP で操作する
Chrome と同じ感じで接続

リモートデバッギングを有効にして起動

firefox --remote-debugging-port 9222

接続とページ遷移は Chrome と同じ感じでできる

import CDP from "chrome-remote-interface"

const cdp = await CDP()
await cdp.Page.navigate({ url: "https://github.com/" })

ページ内でスクリプトの実行は Chrome だと↓で動く

const expression = `document.title`
await cdp.Runtime.evaluate({ expression, returnByValue: true })

でも Firefox だと context が null と言われてエラー
Chrome のドキュメントだとオプショナルだけど evaluate のパラメーターに contextId を渡せる
ExecutionContextId という型で実体は int
試しに 0 や 1 など渡してみても指定の id の context がみつからないというエラー

context を作る方法を探すと Page.createIsolatedWorld で isolateworld を作ると返り値として ExecutionContextId が受け取れるみたい
Page.createIsolatedWorld には frameId が必要になるけどこれは Page.navigate で受け取れる
試してみたけどフレームが見つからないと言われてエラー

やっぱり Firefox を直接 CDP で動かすのはやめたほうが良さそう

調べてると Selenium は Firefox の CDP サポートをやめる予定があるみたい
https://github.com/SeleniumHQ/selenium/issues/11736

理由として Firefox の CDP 対応が不完全で新しい BiDi の対応を重視してるみたい
https://w3c.github.io/webdriver-bidi/

BiDi が標準化されて普及するなら Playwright もこっちに切り替えていく方針なのかなと思って調べるとこんな QA が出てきた
https://github.com/microsoft/playwright/discussions/14014
動画内での発言で 全メジャーブラウザがサポートされない限り BiDi の実装予定はないみたい
サポートされれば検討するとか
現状では積極的に変えていくつもりはなく様子見みたい
Firefox のシェア
最近話題になってて割合公開してる人を何人か見かけたので自分も調べてみた
このブログはアクセス数が少なすぎて当てにならないからメインの方

ライブドアブログの機能だと Firefox が出て無くて Unknown や その他というのがあって多分この中に入ってる
詳細な数値をみるために Google Analytics を見ると

2022 年 3 月分で 5.3%

もっと少ないと思ってたけど意外といた
Firefox 89 で見た目が変わった
新デザインと聞いていたのでアップデートしました
極端に変わってはないのですが 少し使った感じだと 個人的に前のほうが好きでした

タブが変に広くて縦幅取ってますし URL バーの左右には無駄な空白があります
あと Pocket やメニューなどのアイコンは小さくなって少し押しづらい感があります

何が良くなったのかはいまいちわからないのですが 統計情報を基によく使われる/使われない部分を分析して変更したらしいです
ほとんど使われてないところは非表示になったりです
「何が無くなったか」と言われると特に気づけませんでした

ちゃんと統計情報に基づいてデザイン決めてるだな~と感心した一方で 統計情報の送信って拒否してる人も多いですよね
Google とか Microsoft のサービスではよく送信するかを聞かれますが そういうこと聞かれたらイヤと言う人が多そうです
それも自由だと思いますが 統計情報を送らない以上 開発者側からはいないもの扱いなので自分はよく使う機能だったのに誰も使ってない機能と扱われて機能が消えてしまったりとかもありそうですよね
情報の送信を拒否するような人ほどマイナー機能まで使ってそうな印象ありますし
Firefox send 終わってた
2020/09/17 で終わってたみたい
https://support.mozilla.org/ja/kb/what-happened-firefox-send

最近はあまり使ってなかったけど誰かに GB 単位のデータを送るときは便利だったのになー

終了の理由は一部ユーザがマルウェアをアップロードする場所に使ってたからみたい
中身をチェックしない以上 こういうサービスがそういう使われ方するのはやる前からわかることだと思うんだけどそれが原因ってなんだかなぁ
Firefox のサービスだからといって 知らない誰かがアップロードしたデータが安全なわけないし 信用できるデータ以外はダウンロードしないのはネットの基本なんだから マルウェアがあるくらい気にしなくていいと思うけど
ストレージの 9 割以上がマルウェアで使われてるとかいうならともかく一部ユーザ程度でサービスやめてたらこの手のサービス存在しなくなりそう
Firefox の正規表現エンジンが V8 と同じものになるみたい
https://www.publickey1.jp/blog/20/mozillav8firefox.html

Firefox は最新機能を積極的に取り入れてるものの正規表現だけは対応してませんでした
http://var.blog.jp/archives/81194754.html

これまでも V8 と同じエンジンではあったものの Firefox 用にフォークしていて 新機能があるたびその変更を取り込んでいたようです
この作業に時間がかかっていたようで Firefox 用にフォークするのではなく V8 と同じものをそのまま使えるようにするのだとか

これで Firefox でも正規表現の最近の新機能が使えるようになりそうです
未対応だった正規表現機能も今月末にリリース予定の 78 から使えるらしいので 78 からこの新しい仕組みになってるのかもしれませんね
またデフォルト挙動が変わるのか
https://forest.watch.impress.co.jp/docs/news/1257725.html

自分が作ったもので opener を使ってたところは多分なかったけど 互換性互換性言うならこういうところ変えないでほしいな
変えるなら過去の統一性ない挙動全部一新してほしい
悪用と言っても URL 書き換えて移動するだけだし そういうコードを仕込んでるページを開いた以上 そこをブロックしてもって感じがする
Firefox でリサイズ検知されない?
body の中に div で 100vw/100vh にして全画面にしてるページをふと Firefox で開いてみたら
画面は普通に出るのにウィンドウを広げたり閉じたりしても自動で div がリサイズされなかった
拡大したらなにもない白い部分が外側にできて縮小したらスクロールバーが出る

ボタン押したりしても変化なしでリロードすればそのときの画面いっぱいに表示される
開発ツールを ON にしたらそのタイミングでリサイズされて 開発ツール出てるときや消した後はウィンドウに沿ってリサイズされた
変なバグっぽいけど単純に 100vw/100vh の要素置いたページだけだと再現してない

詳しく→ Firefox でウィンドウリサイズしても 100vw/100vh が更新されない 
Shift+Enter
Chrome で Google の検索フォームなどのテキスト入力中に Shift-Enter を押すと新しいウィンドウで結果のページが開かれる
タブじゃなくてウィンドウ
URL バーのところでも同じ

Firefox だと URL バーだと新しいタブで開く
URL バーの右側の検索フォームや Google のページなどでは効果なし

Vivaldi だと URL バーの右側の検索フォームや Google のページでは新しいタブで開く
URL バーだと効果なし
Firefox の print
開発ツールだと
print === window.print
// false

開発ツール外で実行すれば
const scr = document.createElement("script")
scr.innerHTML = "console.log(print === window.print)"
document.head.append(scr)
// true

window.print は印刷画面の表示
Firefox の開発ツールのコンソールで参照できる print はコンソールに出力する処理
toString してから console.log する

print({a: 1})
// "[object Object]"

オブジェクトの表示できないから基本 console.log でいい