質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Electron

Electronは、HTML5とNode.jsというWebの技術を用いてデスクトップアプリケーションを作成できるクロスプラットフォームな実行環境です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

2748閲覧

electron ウインドウサイズの復元について

keikei

総合スコア13

Electron

Electronは、HTML5とNode.jsというWebの技術を用いてデスクトップアプリケーションを作成できるクロスプラットフォームな実行環境です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2017/05/15 10:52

electronでtodoアプリを作成しています。

画面のサイズと位置を保存して、次回起動時に復元する処理をしています。
下記のコマンドで結果がことなるのですが1のコマンドでも期待通り動かしたいと思います。
ご教授お願いいたします。
よろしくお願いいたします。

1.asar pack
2.electron-packager

1のコマンドを使用するとパッケージする前に保存した画面サイズと位置で起動しますが
サイズ、位置を変更して再起動してもパッケージ前に保存したサイズと位置で起動してしまいます。

2のコマンドを使用した場合は期待通り動きます。

os :winsows7
version
electron:1.4.13
node.js:6.10.2

javascript

1const {app, BrowserWindow, Menu} = require('electron'); 2const path = require('path'); 3const url = require('url'); 4 5 6let win; 7 8function createWindow () { 9 // Create the browser window. 10 try{ 11 var setWin = require("./setWin.json"); 12 win = new BrowserWindow(setWin); 13 }catch(e){ 14 win = new BrowserWindow({width: 800, height: 600, x: 0, y: 0, show: false}); 15 } 16 17 win.once('ready-to-show', () => { win.show(); }); 18 win.loadURL(url.format({ 19 pathname: path.join(__dirname, 'index.html'), 20 protocol: 'file:', 21 slashes: true 22 })); 23 24 var settings_path = require('path').join(__dirname, 'setWin.json'); 25 26 win.on('close', function() { 27 var fs = require('fs'); 28 var item = win.getBounds(); 29 item = '{' + '"x":' + item['x'] + ',' + '"y":' + item['y'] + ',' + '"width":' + item['width'] + ',' + '"height":' + item['height'] + ',' + '"show":false}' 30 31 fs.writeFileSync(settings_path, item); 32 33 }); 34 35 36 win.on('closed', () => { 37 38 win = null; 39 }) 40} 41 42app.on('ready', createWindow); 43 44const template = [ 45 { 46 label: 'Edit', submenu: [{role: 'undo'}, {role: 'redo'},{type: 'separator'},{role: 'cut'},{role: 'copy'},{role: 'paste'},{role: 'pasteandmatchstyle'}, 47 {role: 'delete'},{role: 'selectall'}] 48 }, 49 { 50 label: 'View',submenu: [{role: 'reload'},{role: 'toggledevtools'},{type: 'separator'},{role: 'zoomin'},{role: 'zoomout'},{type: 'separator'},{role: 'togglefullscreen'}] 51 }, 52 { 53 role: 'window',submenu: [{role: 'minimize'},{role: 'close'}] 54 } 55] 56const menu = Menu.buildFromTemplate(template) 57Menu.setApplicationMenu(menu) 58 59 60 61 62 63app.on('window-all-closed', () => { 64 65 if (process.platform !== 'darwin') { 66 app.quit(); 67 } 68}); 69 70app.on('activate', () => { 71 72 if (win === null) { 73 createWindow(); 74 } 75});

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

https://github.com/electron/electron/blob/master/docs-translations/jp/tutorial/application-packaging.md

アーカイブは読み取り専用です

アーカイブは修正できないため、ファイルを変更できる変更できる全ての Node API は asar アーカイブに対して動作しません。

ですので、fs.writeFileSync は asar 内を指定した場合書き込めないため、パッケージ前に保存したサイズと位置で起動することになります。

その為、設定を保存するには外部へ設定ファイルを置く必要があります。
OSごとのパスの違いなどを吸収するために electron-json-storage などのライブラリの利用をおすすめします。
http://qiita.com/KimuraTakaumi/items/fcae3fb9ca62143a00b4

投稿2017/05/15 11:27

TakeoAsai

総合スコア880

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

keikei

2017/05/15 14:41

TakeoAsai様 回答ありがとうござました。 読み取り専用ということに気づきませんでした。 electron-json-storageを使用してみたのですが、私の知識不足で上手くできませんでした。 そこで保存先をapp.getPath('userData')にしたところ上手くできました。 electron-json-storageも使用できるように勉強していく次第です。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問