2017-02-18 15 views
1

私の主なプロセス(重要なコード):電子IPC:なぜ私のipcメッセージが受信されていませんか?

let introWindow 
let win = null 

function createWindow() { 
    // Create the browser window. 
    introWindow = new BrowserWindow({ 
      width: 600, 
      height: 480, 
      title: "Glaze", 
      resizable: false 
     }) 
     // and load the index.html of the app. 


    introWindow.loadURL(url.format({ 
      pathname: path.join(__dirname, 'src/html/start.html'), 
      protocol: 'file:', 
      slashes: true 
     })) 

    // Emitted when the window is closed. 
    introWindow.on('closed', function() { 
     // Dereference the window object, usually you would store windows 
     // in an array if your app supports multi windows, this is the time 
     // when you should delete the corresponding element. 
     introWindow = null 
    }) 
} 

function createMainWindow(arg) { 
    const htmlPath = path.join('file://', __dirname, 'src/html/index.html?room=' + arg.room + "&nick=" + arg.nick) 
    win = new BrowserWindow({ 
      width: 800, 
      height: 700, 
      title: "Glaze" 
     }) 
    win.on('closed', function() { 
     win = null; 
    }) 

    win.loadURL(htmlPath) 
    win.show() 

    win.webContents.send('message', "IT WORKED!"); 

    autoUpdater.on('checking-for-update',() => { 
    sendStatus('Checking for update...'); 
    }) 
    autoUpdater.on('update-available', (ev, info) => { 
    sendStatus('Update available.'); 
    }) 
    autoUpdater.on('update-not-available', (ev, info) => { 
    sendStatus('Update not available.'); 
    }) 
    autoUpdater.on('error', (ev, err) => { 
    sendStatus('Error in auto-updater.'); 
    }) 
    autoUpdater.on('download-progress', (ev, progressObj) => { 
    sendStatus('Download progress...'); 
    log.info('progressObj', progressObj); 
    }) 
    autoUpdater.on('update-downloaded', (ev, info) => { 
    sendStatus('Update downloaded. Will quit and install in 5 seconds.'); 
    // Wait 5 seconds, then quit and install 
    setTimeout(function() { 
     autoUpdater.quitAndInstall(); 
    }, 5000) 
    }) 
    // Wait a second for the window to exist before checking for updates. 
    setTimeout(function() { 
    autoUpdater.checkForUpdates() 
}, 5000); 
} 

// This method will be called when Electron has finished 
// initialization and is ready to create browser windows. 
// Some APIs can only be used after this event occurs. 
app.on('ready', function() { 
     const menu = Menu.buildFromTemplate(template) 
     Menu.setApplicationMenu(menu) 
     createWindow() 

}) 

// Quit when all windows are closed. 
app.on('window-all-closed', function() { 
    let reopenMenuItem = findReopenMenuItem() 
    if (reopenMenuItem) reopenMenuItem.enabled = true 
    // On OS X it is common for applications and their menu bar 
    // to stay active until the user quits explicitly with Cmd + Q 
    if (process.platform !== 'darwin') { 
     app.quit() 
    } 
}) 

app.on('activate', function() { 
    // On OS X it's common to re-create a window in the app when the 
    // dock icon is clicked and there are no other windows open. 
    if (introWindow === null && win === null) { 
     createWindow() 
    } 
}) 

// In this file you can include the rest of your app's specific main process 
// code. You can also put them in separate files and require them here. 

app.on('browser-window-created', function() { 
    let reopenMenuItem = findReopenMenuItem() 
    if (reopenMenuItem) reopenMenuItem.enabled = false 
}) 



ipc.on('close-starter', function(event, arg) { 
    createMainWindow(arg); 
}) 





function sendStatus(text) { 
    log.info(text); 
    win.webContents.send('message', text); 
} 

そして、私のindex.html:

私は私のアプリを実行すると、私は私の winウィンドウ内のdevのツールのコンソールをチェックしないと何がある
<script> 
    const ipc = require('electron').ipcRenderer; 
    ipc.on('message', function(event, text) { 
     console.log("Message received") 
     console.log(text, event); 
     var container = document.getElementById('messages'); 
     var message = document.createElement('div'); 
     message.innerHTML = text; 
     container.appendChild(message); 
    }) 

    console.log("ran") 
</script> 

ファイルが実行されたことを示すran以外のメッセージが出力されました。なぜipcメッセージが通過しないのですか? .sendが呼び出された時点で、winはnullになりません。メインファイルまたは受信ファイルに問題がある可能性がありますか?

+0

を、私は、開発ツールのコンソールを意味します。そして、はい、私はすでに@pergyを試しました – adamSiwiec

+0

私は、ofcを参照してください。そして 'on( 'dom-ready')だけを送ると? – pergy

+0

どういう意味ですか? – adamSiwiec

答えて

3

私のコメントの要約として、webContentsが正常にセットアップされた後にのみipcチャネルを使用することができます。したがって、sendコールをコールバックに入れて、ipcチャネルが稼動していることを確認する必要があります。

documentationsendのコード例は、同じことをやっている:私はコンソールを言うとき

// In the main process. 
const {app, BrowserWindow} = require('electron') 
let win = null 

app.on('ready',() => { 
    win = new BrowserWindow({width: 800, height: 600}) 
    win.loadURL(`file://${__dirname}/index.html`) 
    win.webContents.on('did-finish-load',() => { 
    win.webContents.send('ping', 'whoooooooh!') 
    }) 
}) 
関連する問題