Chrome 拡張機能の popup ウインドウが RDB接続経由時に意図せず閉じられてしまう問題


環境

  • Windows 7 Pro 64bit
  • Google Chrome 67

やりたかったこと

  1. ある Google Chrome のウインドウAで、ツールバーの拡張機能アイコンがクリックされたら popup ウインドウBを開く
  2. popup ウインドウBが開いたとき、新しいウインドウCを(なるべくユーザーに不可視で)開く
  3. ウインドウCでスクレイピングした処理結果を pupup ウインドウBに返却し、popup ウインドウBを再描画する

遭遇した問題

  • Windows リモートデスクトップ接続経由で Google Chrome を使用した際、ツールバーの拡張機能アイコンをクリックしても popup ウインドウBが表示されない
    • このとき、新しいウインドウCは開かれた状態になっている

原因?

  • Windows リモートデスクトップ接続経由で Google Chrome を使用した場合、ウインドウA以外のウインドウ(ここではウインドウC)にフォーカスを奪われると popup ウインドウBが閉じられてしまう
    • 通常は、ウインドウA以外のウインドウにフォーカスを当てても(ウインドウA内で popup ウインドウB以外の領域をクリックしない限り)、popup ウインドウBは閉じられないハズ

解決策(workaround)

  • ウインドウCを開く際にフォーカスを当てないようにする(focused: false
    • また、focused オプションを指定すると(ウインドウCを最小化するための)state オプションが無視されるようなので、ウインドウサイズを極小にしておく
  chrome.windows.create({
    url: url,
    type: 'popup',
-   state: 'minimized'
+   focused: false,
+   top: 0,
+   left: 0,
+   width: 1,
+   height: 1
  }

もっと良いアイディアをお持ちの方は、ぜひコメントをください!

参考資料