Electronハマりメモ
最初に
Electron で Twitter クライアントを開発しているときにハマった所をメモしていきます。
と、メモしていたら Electron がついに Ver 1 に到達しました。 早速アップデートしたので
その際に遭遇したエラーもメモしていきます。
追記:Ver1 に到達したあと、日替わりで Electron 周りのバージョンアップが日替わりリリース状態です。
npm outdated すると古いモジュールを洗い出してくれるので便利です。
環境
Electron 0.37.8 => 1.0.2
Typescript 1.8.0
なので、本文中のコードは全て Typescript です。
本文
BrowserWindow のクッキーを消したい
<code class="language-ts">var loginWindow:Electron.BrowserWindow = new BrowserWindow({width: 800, height: 600});
loginWindow.webContents.session.clearStorageData({ storages: ["cookies"] }, () => {});
Twitter のアカウントを oauth 認証する際に、クッキーが保存されてしまっていると、ログイン画面を
表示せずにそのまま認証が完了してしまうのでクッキーを消したかった。そもそも論で言えば、別のセッションとして
扱って欲しかったが、うまく動かなかった。なので、仕方なくクッキーを全部消してしまうことにした。
<code class="language-ts:動かなかったコード">var loginWindow:Electron.BrowserWindow = new BrowserWindow({width: 800, height: 600, webPreferences: { partition: 'TempSession' } });
ブラウザウィンドウ内で jQuery が使えない
Electron で jQuery が undefined になる http://qiita.com/pirosikick/items/72d11a8578c5c3327069
まさにこの状況。 解決策も上の通り。
<code class="language-ts">var loginWindow:Electron.BrowserWindow = new BrowserWindow({width: 800, height: 600, 'node-integration': false }
require('electron').app => undefined
npm install -g electron
しているとなった。
electron コマンドは electron-prebuilt をインストールすれば一緒に入っている。
なので、正しいのは npm install -g electron-prebuilt である。
require('something') => undefined になった!
require('menu') => require('electron').Menu
require('remote') => require('electron').remote
remote.require('dialog') => remote.require('electron').dialog
要するに、今まで独立していたモジュールが全て electron の配下に入ったということのようです。
アプリ内でコピペができない
Mac 限定かもしれないけれども、アプリ内でコピペができない。
メニュー内にカット、コピー、ペーストのメニューとそれぞれのショートカットキーを登録すればできるようになる。
公式ドキュメント参照
Discussion