直近でブラウザのweb-extensionの作成を検討したりなんかしてます。ツールバーボタンひとつだしてwebsocketでデータ引っ張ってきて特定のページひらくといった単純なやつです。
自分のミッションだとfirefoxとchromeのほぼ最近のバージョンで動けばいいので比較的楽なんだと思いますけども、それでもブラウザ依存に引っかかったネタをひとつ書きます。
開きたいページがすでに開いているかどうかを判定するのにchrome.tabs.queryを使えると理解していて、というか基本その通り動きました。単純なサンプルを書いて使えると思っていたらurlにポートがついていたときの挙動がアレでした(例で書きますが)
http://some.one:8686/page
というページをqueryしようとしてまず素直にそのまま
chrome.tabs.query({url:'http://some.one.page:8686/page'},function(result){});
としていたら、chrome(version60.0.だったか)だと期待通り動きますが、firefox(55.0)*1だと、まだ開いてないよう、とresultの結果が空になって戻ってきてしまい、
chrome.tabs.query({url:'http://some.one.page/page'},function(result){});
これだとhttp://some.one:8686/pageを開いていたらその通り結果を返してきました。chromeも同じ動作をしてくれたので、当面このようにポートを抜いた書き方でコードを書いておこうかと思ってます。
標準のなにかにしたがってchromeもfirefoxも実装されてると思うのでドキュメントを丹念に読めば、まあなにの解釈の違いでこうなってる*2のが理解できるんでしょうけども、自分のツールとして動くUIができればいいので全然深く踏み込んでません。*3