webContents.send и ipcRenderer.on не работает - PullRequest
0 голосов
/ 13 декабря 2018

Я довольно новичок в NodeJS, но у меня довольно большой опыт работы с vanilla JS.

В следующем коде, что именно я не так делаю здесь?

Этоне console.log ничего в консоли разработчика приложения, поэтому я предполагаю, что канал связи каким-то образом нарушен?

Это как-то связано с тем, что readdir является асинхронным?

index.js

fs.readdir(__dirname, (err, files)=>{
  files.forEach((file, index)=>{
    console.log('display', __dirname+'\\'+file) // this prints everything as expected
    mainWindow.webContents.send('display', __dirname+'\\'+file)
    // mainWindow.send(...) doesn't work either
  })
})

index.html

const electron = require('electron')
const {ipcRenderer} = electron
const con = document.getElementById('con')

ipcRenderer.on('display', (e, arg)=>{
  const div = document.createElement('div')
  const txt = document.createTextNode(arg)
  div.appendChild(txt)
   con.appendChild(div)

   console.log(e)   // neither this
   console.log(arg) // nor this prints anything to the app's developer console
 })

Вот CODEPEN со ВСЕМ кодом.

Решение

Оказывается, обертка webContents.send в другую функцию сделала свое дело.Однако я не уверен, почему это так.

mainWindow.webContents.on('did-finish-load', ()=>{
  mainWindow.webContents.send('display', __dirname+'\\'+file)
})

Может быть, кто-нибудь захочет объяснить мне, почему я должен заключить webContents.send в другую функцию, чтобы она работала правильно?

1 Ответ

0 голосов
/ 13 декабря 2018

Может, кто-нибудь захочет объяснить мне, почему я должен обернуть файл webContents.send в другую функцию, чтобы он работал правильно?

Это если вы отправите сообщение в окно каккак только он создан, у него нет времени на загрузку страницы, и если js-файл, который его получает, еще не загружен, ничего не произойдет.Но если вы отправите его, когда он будет загружен (что и делает 'did-finish-load'), тогда js будет готов принять событие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...