LoginSignup
8
8

More than 5 years have passed since last update.

JXA で Google Chrome を Incognito Window (シークレットモード) で開き直す

Last updated at Posted at 2015-08-23

プライベートブラウジングについて

私は普段、 OS X 上の Google Chrome で Web ブラウジングしている。

セキュリティ上の懸念というか、潔癖症のようなものを感じていて、
メインで使うブラウザでは日をまたいで Cookie を残したくない。
最近は、ほとんど常に Incognito Window にしている。
(Incognito Window はシークレットモードとかプライベートブラウジングという呼ばれ方もしているアレ)

頻繁にログインするようなサイトは Fluid で専用アプリ化している。
なのでログイン時に認証を求められることが多くて困るようなことはない。
Fluid で分けてしまえばサイトごとに Cookie が分断されるので万が一の時にも安心。

問題点

ひとつだけ困ることといえば、 Google Chrome を最初に立ち上げた時にノーマルモードで立ち上がってしまうこと。

OS X 版 Google Chrome の起動時に立ち上がるウインドウをシークレットモードに

で書いたような工夫をしてみたが、 Selenium が動作しなくなったり Chrome Secure Storage へのアクセス権を尋ねるポップアップが出るようになったりと、解決方法として使えるものではなかった。

解決方法

次のよう方針を考えた。

  • Google Chrome のウインドウを取得する。
  • ノーマルモードならすべてのタブの URL を記録し、閉じていく。
  • 記録した URL をシークレットモードで開き直す。

これを JXA で実装した。
これを定期的に実行すれば良さそう。

コード

#!/usr/bin/env osascript -l JavaScript

main();

function main() {
  if (!isAppWaking('Google Chrome')) {
      return;
  }
  restrictChromeIncognito();
}

function isAppWaking(appName) {
  var se = Application('System Events');
  return se.processes().some(function (process) {
    return process.name() === appName;
  });
}

function restrictChromeIncognito() {
  var alreadyOpenIncognito = false 
    , reopenUrls = [] 
    , chrome = Application('Google Chrome')
    ;
  chrome.windows().forEach(function (window) {
    var mode = window.mode();
    if (mode === 'incognito') {
      alreadyOpenIncognito = true; 
      return;
    }
    window.tabs().forEach(function (tab) {
      var url = tab.url();
      reopenUrls.push(url);
    });
    window.close();
  });
  if (!alreadyOpenIncognito) {
    chrome.Window({mode: 'incognito'}).make()
  }
  openUrls(chrome, chrome.windows[0], reopenUrls);
}

function openUrls(chrome, window, urls){
  urls.forEach(function (url) {
    var newTab = chrome.Tab({url: url});
    window.tabs.push(newTab);
  });
}
8
8
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8