2016-07-12 13 views
2

私は別のウィンドウを開くことができる電子アプリを持っています。電子のプロセスをレンダリングするメインプロセスのパラメータを渡す方法

アプリ起動時に、アプリは(同じHTMLとJSファイルを読み込む)一連のウィンドウを開きますが、paramsを使用すると、表示された各ウィンドウを変更することができます。

例:ファイル内

app.on('ready', async() => { 
    ... 
    // open window for stuff 1 
    win1 = new BrowserWindow({ 
    width: 1024, 
    height: 728 
    }); 
    win1.loadURL(`file://${__dirname}/app/app.html?id=1`); 

    // open window for stuff 2 
    win2 = new BrowserWindow({ 
    width: 1024, 
    height: 728 
    }); 
    win2.loadURL(`file://${__dirname}/app/app.html?id=2`); 

明らかに渡すのparams://パスは動作しません。 私はレンダリングされたウィンドウをパラメータにするために、電子ドキュメントやインターネット上のどこかに明確な解決策を見つけることができません。

私はおそらくウィンドウの準備ができてからIPC通信を使用することができますが、ちょっと変わったようです。

P.S. :私のアプリケーションがReact/Reduxで構築されていることを正直に言うと、私が見たいと思うparamは、このビューを聞くためのreduxストアキーです。

+0

'file://'パスにあるパラメータ(とハッシュ)を渡すと、うまく動作します。すべてのパラメータは、期待通りに 'location'にあります。 – Fozi

+0

HTTPサーバーでそれらを提供する場合は、このパラメーター化されたURLの概念をファイルに使用しません。代わりに、あなたはさまざまなことをすることができます。クッキーを使用し、開始時にそれらを読む。または、単にwin1.webContents.executeJavaScript( "var query = {id:1}")を使用してください...少なくとも1つのライナーです –

+0

私は両方の答えが取引をしたと思います。 – damien

答えて

2

クエリ文字列の方法は、我々は唯一の一意の文字列のparamを渡す必要がある場合は特に、非常に簡単にそれを行うための信頼性の高い方法である原子のソースコードをよる

// main process 
win1.loadURL(`file://${__dirname}/app/app.html?id=${id}`); 

// rendered process 
console.log(global.location.search); 

https://github.com/electron/electron/issues/6504

0

ウィンドウ(did-finish-loadイベント)にJavaScriptコードの実行を挿入し、正しい還元状態部分で反応再描画をトリガーすることができます。しかし、それはレンダリングされたプロセスにおいて追加のライフサイクルステップを必要とする。

「local filepath」でハッシュやクエリを使用するのはちょっと変わっていますが、私の場合、ハッシュはreduxストアブランチをこのウィンドウ(file://which-code-to-load#which-content)で考慮する必要があるため、意味があります。

だから私はこのアプローチで完全に安易ではないとしても、今私は第二の選択肢を取るでしょう。

APIがウィンドウのオープン時にメインプロセスからグローバル変数を宣言する方法を提供していないことは残念です。私は機能要求を投稿します。

0

残念ながら、それはそうかなり複雑です。おそらく電子でレンダリングする.htmlに変数を追加することはできません。

もちろん、あなたはurlを使うことができますが、起動時間が非常に(vy秒)遅くなるか、BrowserWindoでJavascriptを実行することもできます。

唯一の方法はIPCであり、javascript .htmlに依存しない変数はメインプロセスの変数です。非常に悲しいですが..

関連する問題