Firefox Portable67になってから不可解な現象に悩まされました。
Firefox Portable67を起動後、他のアプリでURLを開くと(例えばメーラーでURLをクリックすると)、Forefox Portable66 までは今起動しているFirefoxの新しいタブでURLを開いていたのですが、67では新しいインスタンス(ウインドウ)が立ち上がるようになってしまいました。
原因
どうやらFirefox67からプロファイルの扱いが変わったのが原因みたいです。
これを説明するには、まずFirefox Portableの起動の仕組みを理解しておく必要があります。
Firefox Portableの起動の仕組み
Firefox Portableは、
FirefoxPortable.exeを起動 → Portable版の設定でfirefox.exe(※)を起動
という順番で起動されます。
これにより、
<Firefox Portableインストールディレクトリ>\Data\profile
のプロファイルが使用され、ポータブルアプリとして動作するわけです。
Firefox 66と67以降の違い
メーラなどでURLをクリックすると、WindowsシェルがHTTPもしくはHTTPSプロトコルに関連付けられたアプリを起動します。この場合は、firefox.exeですね。
firefox.exeが起動している状態で、さらにfirefox.exeが起動された場合、Firefox 66までは(設定にもよりますが)新しいインスタンスを起動するのではなく、すでに起動しているFirefoxにURLが渡され、新しいタブでそのURLを開きます。
これに対してFirefox 67以降では、デフォルトプロファイル(%APPDATA%\Roaming\Mozilla\Firefox\Profiles\xxxxxx.default-release)を使用してFirefoxを起動し、そのインスタンスでURLを開く仕様に変更されたようです。
先ほども説明したようにFirefoxPortable.exe経由で起動したFirefoxは、ポータブル版のプロファイルを使用しています。このため、新しいタブではなく、新しいインスタンスでそのURLを開くようになってしまうわけです。
解決方法
ここまで分かれば対策は簡単!
HTTP, HTTPSプロトコルの関連付けをfirefox.exeからFirefoxPortable.exeに変更すればOKです!
ただ、ひとつ困ったことが。
普通であれば、[設定] - [アプリ] - [既定のアプリ] - [プロトコルごとに既定のアプリを選ぶ] から関連付けを変更できるんですが、アプリの選択画面でFirefoxPortable.exeが出てこないんです。
そこで、レジストリを直接いじることにします。
regeditを立ち上げ HKEY_CLASSES_ROOT\FirefoxHTML\shell\open\command を
"\App\Firefox64\firefox.exe" -osint -url "%1"
から
"\FirefoxPortable.exe" "%1"
に変更します。
同様に HKEY_CLASSES_ROOT\FirefoxURL\shell\open\command も
"\App\Firefox64\firefox.exe" -osint -url "%1"
から
"\FirefoxPortable.exe" "%1"
に変更します。
これで完了です!
もちろん、HTTP, HTTPSの関連付けを変更できるアプリなどを使ってもOKです。