PostgreSQL公式GUIクライアントツールの「PgAdmin4」。
PostGISのgeometry型をWeb地図上に表示出来たり、サーバモードで起動すればチーム内で共通的に使えるPostgreSQLクライアントになってくれて非常に重宝します。
PgAdmin4が出てから結構な年月、Windows10にスタンドアロンで入れて使っていたのですが、ある日起動すると挙動がおかしくなっていました。
事象
PgAdmin4をスタンドアロン実行すると以下の順序で起動します。
- localhostでpythonのHTTPサーバが起動
- OSのデフォルトブラウザでクライアントページを開く
デフォルトのブラウザをChrome(85.0.4183.121)にしているので下記画像のように起動しますが、右クリック後のコンテキストメニューが消えずに残るようになってしまいました。
右クリックする度にF5して再描画しないとコンテキストメニューが消えないという煩わしさ。どうしてこうなった・・・?
原因
F12でデベロッパーツールを起動してみると以下のエラーが出ていました。該当箇所のソースを見ると、再帰処理の結果、スタックがオーバーフローしているようです。
index.js:35 Uncaught RangeError: Maximum call stack size exceeded
at Synchronizetion.window.requestAnimationFrame.window.setTimeout (index.js:35)
at ce (vendor.main.js?ver=42600:2)
at Synchronizetion.window.requestAnimationFrame.window.setTimeout (index.js:35)
at ce (vendor.main.js?ver=42600:2)
at Synchronizetion.window.requestAnimationFrame.window.setTimeout (index.js:35)
at ce (vendor.main.js?ver=42600:2)
at Synchronizetion.window.requestAnimationFrame.window.setTimeout (index.js:35)
at ce (vendor.main.js?ver=42600:2)
at Synchronizetion.window.requestAnimationFrame.window.setTimeout (index.js:35)
at ce (vendor.main.js?ver=42600:2)
Synchronizetion.window.requestAnimationFrame.window.setTimeout @ index.js:35
ce @ vendor.main.js?ver=42600:2
Synchronizetion.window.requestAnimationFrame.window.setTimeout @ index.js:35
:
PgAdmin4を4.11 → 4.26にバージョンアップしても変化無し。
どうもChromeのどこかのバージョンアップが原因のようでPgAdmin4のフロントエンドソースを追っても無駄な気がしてきました。
対処
取りあえずChromeはデフォルトブラウザにしておきたいけど、PgAdmin4はChromeで開いてくれなくても良いので、個別設定して起動ブラウザをFireFoxに変えることにしました。
PgAdmin4を起動するとタスクメニューの中にPgAdmin4のアイコンが出来るのでこれを右クリック。「Configure…」を選択。
「Runtime」タブの「Browser Command」にFireFoxのexeとパラメータを設定。
“C:\Program Files\Mozilla Firefox\firefox.exe” %URL%
「Fixed Port Number ?」も任意のポートに設定してあげます。(設定しないとブラウザでポート指定されず、開いてくれませんでした)
一度PgAdmin4を終了し、再起動するとFireFoxで起動するようになります。コンテキストメニューもしっかり消えてくれました。
ニッチな事象だと思いますが、遭遇した方は起動ブラウザ変更をお試しください。
(*)逆にChromeに変更したい場合はURLパラメータキーとして-appが必要です。
“C:\Program Files\Google\Chrome\Application\chrome.exe” –app=%URL%