2016-07-12 3 views
2

다른 창을 열 수있는 Electron 앱이 있습니다.메인 프로세스에서 전자로 프로세스를 렌더링하는 매개 변수를 전달하는 방법

앱을 실행하면 앱에서 동일한 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 : // 경로가 작동하지 않습니다. 전자 문서 나 인터넷의 다른 곳에서 렌더링 된 윈도우를 param으로 처리하는 명확한 해결책을 찾을 수 없습니다.

윈도우 준비가 끝난 후 IPC 통신을 사용할 수는 있지만, 단지 자식 뷰에 변수를 전달하기 전까지는 조금 복잡해 보입니다.

P. : 내 애플리케이션이 React/Redux로 만들어졌고 솔직하게 전달하고자하는 param이이 뷰를 수신 대기하는 redux 스토어 키입니다.

+0

'file : //'경로에있는 매개 변수 (및 해시)를 전달하면 잘 작동합니다. 모든 매개 변수는 예상대로 '위치'에 있습니다. – Fozi

+0

파일에 대해이 매개 변수화 된 URL 개념을 사용하지 않을 것입니다. HTTP 서버에서이 매개 변수화 된 URL 개념을 제공하면됩니다. 대신 다른 일을 할 수 있습니다. 쿠키를 사용하여 처음부터 읽으십시오. 또는 win1.webContents.executeJavaScript ("var query = {id : 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 이벤트에서) 자바 스크립트 코드 실행을 삽입하고 정확한 redux 상태 부분으로 반응을 다시 트리거 할 수 있습니다. 그러나 렌더링 프로세스에서 추가적인 라이프 사이클 단계가 필요합니다.

"로컬 파일 경로"에서 해시 또는 쿼리를 사용하는 것이 이상하게 들리지만 내 경우에는이 해시 창 (file://which-code-to-load#which-content)에서 고려해야 할 redux 저장소 지점을 설명하는 해시가 의미가 있습니다.

그래서 지금 당장이 방법을 사용하기가 쉽지 않을지라도 두 번째 옵션을 택할 것입니다.

API가 창 열기시 기본 프로세스에서 전역 변수를 선언 할 수있는 방법을 제공하지 않는 것은 유감입니다. 기능 요청을 게시합니다.

0

을 것 같습니다 꽤 복잡해. 좋은 방법으로 전자로 렌더링하는 .html 변수를 추가 할 수 없을 것입니다.

물론 url을 사용할 수는 있지만 부팅 속도가 매우 빨라집니다 (초 단위). 또는 BrowserWindo에서 Javascript를 실행하면 부팅 속도가 느려집니다.

유일한 방법은 IPC이며 javascript .html의 불가지론자를 주 프로세스의 변수에 맡기는 것입니다. 매우 슬프지만 ..