2016-11-06 7 views
0

私はどこでも検索しましたが、私の電子アプリケーションの複数のインスタンスを作成する方法を見つけることができませんでした。 スティッキーノートアプリを作成しようとしていますが、新しいスティッキーノートを作成するプラスウィンドウがあり、そのスティッキーノートには同じプラスボタンがあります。電子のアプリケーションの複数のインスタンスを作成

enter image description here

私はこれを試してみましたが、付箋紙の上に新しいインスタンスをプラスボタンをクリックして、初めての大きな問題がある作成したが、二回目に2つの新しいインスタンスをクリックすると、プラスボタン作成され、三回目にされますクリックするプラスボタン4新しいインスタンスが

インサイドmain.jsファイルを作成している

let mainWindow 

function createWindow() { 
    // Create the browser window. 
    mainWindow = new BrowserWindow({width: 190, height: 190,frame:false,transparent:true}) 

    mainWindow.loadURL(url.format({ 
    pathname: path.join(__dirname, 'index.html'), 
    protocol: 'file:', 
    slashes: true 
    })) 
    mainWindow.on('closed', function() { 
    mainWindow = null 
    }) 
    //when plus button is clicked it is firing a message 'create-new-instance' through ipcRenderer 
    ipcMain.on('create-new-instance',()=>{ 
    console.log('create new window'); 
    createWindow(); 
    }) 
} 

//this is called when for the first time the app is launched 
app.on('ready', createWindow) 

Insideは、プラスボタンが配置されているファイルをrenderer.js

document.getElementById('plusButton').addEventListener("click",()=>{ 
    var {ipcRenderer} = require('electron') 
    ipcRenderer.send('create-new-instance') 
}) 

私は最初のボタン「を作成、新しいインスタンスは」ノートのインスタンスが1つしかないとして解雇され(クリックプラス際に問題があります最初にアプリケーションを起動したときに作成された)新しいノートが作成され、2つのインスタンスが「create-new-instance」イベントをリッスンできるようになり、2回目のプラスボタンをクリックすると、合計4つの音符になります。

それを行う方法を私を助けたり、私に他の代替方法を提案してください:)

答えて

1

ここでの主な問題は、あなたが、createWindow()内部create-new-instanceイベントのためにそれが追加されますので、毎回createWindow()の実行をリスナーを追加しているということです別のイベントリスナーとなり、create-new-instanceが発行されると、それぞれのリスナーが新しいウィンドウを作成します。これを避けるには、createWindow()以外のイベントサブスクリプションを移動する必要があります。createWindow()が呼び出されても、イベントのリスナーが1つしかないようにしてください。

+0

もう1つの質問アプリの各インスタンスには55MBの物理メモリが割り当てられますが、ユーザーが10インスタンスのアプリケーションを開くと、物理ストレージは500MB以上になります。 appの複数のインスタンスが作成されているという錯覚を知っている代替方法がありますが、実際には1つのプロセスだけがそのフードを受けています –

関連する問題