2016-08-02 30 views
4

我正在寫一個Eletron程序。在程序中有一個由主進程創建的索引窗口(main.js)。在這個窗口中有一個文件列表(圖片)。當我點擊該列表中的一個文件時,我想啓動顯示該文件的第二個窗口。 第二個窗口由索引窗口(index.js)的渲染器進程啓動。我如何在索引窗口的渲染器進程和第二個窗口的渲染器進程之間進行通信?Electron中的兩個渲染器進程之間的通信

代碼:

創建從主過程中main.js索引窗口:

let win; 

function createWindow(){ 
    // Create the browser window. 

    win = new BrowserWindow({width: 1024, height: 768, minWidth: 800, minHeight: 600, show: false, icon: 'files/images/icon.png'}); 

    win.loadURL(`file://${__dirname}/files/html/index.html`); 
    win.once('ready-to-show',() => { 
    win.show() 
    }) 

    // Emitted when the window is closed. 
    win.on('closed',() => { 
    win = null; 
    }); 
} 
app.on('ready', createWindow); 

在index.html的index.js(渲染處理)開始:

<script src="../javascript/index.js"></script> 

在index.js的function create_sprite_window()被稱爲它創建了一個子窗口:

const fs = require('fs'); 
const path = require('path'); 
const {BrowserWindow} = require('electron').remote 
let child_windows = []; 


function create_child_window(URL, width, height){ 
    let rem_win = require('electron').remote.getCurrentWindow(); 
    let new_win = new BrowserWindow({width: width, height: height, minWidth: 400, minHeight: 300, show: false, parent: rem_win, minimizable: true, maximizable: true, skipTaskbar: true}); 
    child_windows[child_windows.length] = new_win; 
    console.log(child_windows); 
    new_win.loadURL(URL); 
    new_win.once('ready-to-show',() => { 
    new_win.show() 
    }) 
    return new_win; 
} 
function create_sprite_window(){ 
    new_win = create_child_window(`file://${__dirname}/../html/sprite_manager.html`, 800, 400); 

} 

子窗口存儲在數組child_windows中。

是否有可能再發送的圖像的路徑轉移到第二窗口,或者可選地,編輯所述第二窗口的<img>標籤從(在第二窗口getElementById.src = path;設置<img>標籤的源至圖像)索引窗口?

回答

3

我自己找到了答案。 要在第二個渲染器窗口中顯示正確的圖像,我將GET參數添加到包含圖像路徑的URL。

+1

它可能會工作,但它不會是電子的最佳解決方案。一種方法是使用'ipcMain'和'ipcRenderer'模塊。通過您的索引文件渲染器,您可以將文件路徑發送到主進程然後主進程可以使用該文件路徑打開一個新窗口 –