ログ日記

作業ログと日記とメモ

Chromeのマルチディスプレイ移動と全画面表示の不安定さをExtensionで解決する

全画面表示

Chromeにはkioskという起動オプションがあり、常にF11状態になる。
ただこれの初回起動時の動作が不安定で、一度F11を押さないと全画面にならない場合がある。
ならない場合がある、というのは、同じ環境で何度も「起動」「終了」を繰り返すと全画面になったりならなかったりする。


仕方がないので拡張で解決。

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
  if (!tab.url)
    return;
  if (!tab.url.match("http://test.localhost/#full"))
    return;

  chrome.windows.get(tab.windowId, null, function(w){
    if (w.type == 'fullscreen')
      return;

    chrome.windows.update(w.id, {state: "fullscreen"}, function(){});
  });
});

ショートカットアイコンに--kiosk "http://test.localhost/#full" オプションを指定して、そのアイコンから起動する。
#full は何もせずにトップページにリダイレクト。

ウィンドウをデュアルディスプレイに移動

JavaScriptのwindow.moveToではディスプレイの境界を超えて移動できない。
ただし、window.moveTo(2000, 0); window.moveTo(0, 0); と立て続けに実行すると、デュアルディスプレイの左上に移動することがある。
移動することがある、というのは、移動したり移動しなかったり。体感ではmoveByを使うとデュアルディスプレイに移動できる確率が上がる。


仕方がないので拡張で解決。

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
  if (!tab.url)
    return;
  if (!tab.url.match("http://test.localhost/#sub"))
    return;

  chrome.windows.get(tab.windowId, null, function(w){
    if (w.type == 'fullscreen')
      return;
    chrome.windows.update(w.id, {left: 1500}, function(){
      chrome.windows.update(w.id, {state: "fullscreen"}, function(){});
    });
  });
});

メインディスプレイの横幅が1280程度だとして、サブディスプレイが右側にあるとした場合、上記のコードはサブディスプレイで全画面表示する。
この拡張を読み込んでおけば、window.open('#sub', 'sub') すると新しいウィンドウはデュアルディスプレイ側で全画面表示される。
ただし現状試した感じではうまくいっているが100%移動できるかどうかは不明。


リファレンスは https://developer.chrome.com/extensions/windows.html ここ。
おそらくExtension APIならC的な動作になってディスプレイの境界も移動できるだろうという予想。