FAQ по Electron
Проблемы, возникающие при установке Electron
При выполнении команды npm install electron
, некоторые пользователи сталкиваются с проблемами установки.
В большинстве случаев, эти ошибки являются результатом проблем сети и не связаны с npm пакетом electron
. Такие ошибки, как ELIFECYCLE
, EAI_AGAIN
, ECONNRESET
иETIMEDOUT
возникают в результате проблем с сетью. Лучшее решение - попытаться переключить сеть, или немного подождать, и попытаться установить снова.
Также вы можете попытаться скачать Electron непосредственно из electron/electron/releases, если установка через npm
терпит неудачу.
Когда Electron получит последнее обновление Chrome?
Chrome для Electron обычно выпускается в течение одной или двух недель после выпуска стабильной версии Chrome. Этот срок не является гарантированным и зависит от объема работ, связанных с обновлением.
Используется только стабильный канал Chrome. Если в бета- или dev-версии будет исправление, то мы перенесём его.
For more information, please see the security introduction.
Когда Electron получит последнее обновление Node.js?
После выпуска новой версии Node.js, мы обычно ждем примерно месяц до обновления в Electron. Это помогает избежать ошибок, которые присутствуют в новых версиях Node.js, что случается довольно часто.
Новые возможности Node.js обычно входят в обновления V8, так как Electron использует V8, поставляемый с браузером Chrome, новейшие возможности JavaScript в новой версии Node.js обычно уже входят в Electron.
Как передавать данные между страницами?
Для передачи данных между веб-страницами (графическими процессами) самым простым способом является использование HTML5 API, который уже доступен в браузерах. Хорошими вариантами будут: Storage API
, localStorage
, sessionStorage
и IndexedDB
.
В качестве альтернативы вы можете использовать IPC примитивы, предоставленные Electron. To share data between the main and renderer processes, you can use the ipcMain
and ipcRenderer
modules. To communicate directly between web pages, you can send a MessagePort
from one to the other, possibly via the main process using ipcRenderer.postMessage()
. Последующая связь через порты сообщений прямая и не проходит через главный процесс.
Трей моего приложения исчезает через несколько минут.
Это происходит, когда переменная, используемая для хранения трея уничтожается сборщиком мусора.
Если Вы столкнулись с этой проблемой, могут оказаться полезными следующие статьи:
Если Вы хотите это быстро исправить, Вы можете сделать переменную глобальной, заменив для этого следующий код:
const { app, Tray } = require('electron')
app.whenReady().then(() => {
const tray = new Tray('/путь/до/иконки.png')
tray.setTitle('привет мир')
})
на этот:
{ app, Tray }
У меня не получается использовать jQuery/RequireJS/Meteor/AngularJS в Electron.
В связи с интеграцией Node.js с Electron, существуют некоторые дополнительные ключевые слова вставляемые в DOM, такие как: module
, exports
, и require
. Это вызывает проблемы для некоторых библиотек, так как они пытаются вставить такие же имена.
Для решения этой проблемы, Вы можете отключить интеграцию node в Electron:
// В основном процессе.
const { BrowserWindow } = require('electron')
const win = new BrowserWindow({
webPreferences: {
nodeIntegration: false
}
})
win.show()
Но если Вы хотите сохранить возможность использования Node.js или API Electron, Вы должны переименовать переменные на странице перед подключением других библиотек:
<head>
<script>
window.nodeRequire = require;
delete window.require;
delete window.exports;
delete window.module;
</script>
<script type="text/javascript" src="jquery.js"></script>
</head>
require('electron').xxx
is undefined (не определено).
При использовании встроенного модуля Electron может возникнуть подобная ошибка:
> require('electron').webFrame.setZoomFactor(1.0)
Uncaught TypeError: Cannot read property 'setZoomLevel' of undefined
Скорее всего, Вы используете модуль в неправильном процессе. Например electron.app
может быть использован только в главном процессе, в то время как electron.webFrame
доступен только в процессах рендеринга.
Шрифт выглядит размытым, что это и что я могу с этим сделать?
Если субпиксельный анти-алиасинг выключен, то шрифты на ЖК-экранах могут быть размытыми. Пример:
Для анти-алиасинга подпикселя требуется непрозрачный фон, содержащий глифы шрифта. (См. эту проблему для получения дополнительной информации).
To achieve this goal, set the background in the constructor for BrowserWindow:
const { BrowserWindow } = require('electron')
const win = new BrowserWindow({
backgroundColor: '#fff'
})
Эффект виден только на (некоторых?) ЖК-экранах. Даже если вы не видите разницы, некоторые пользователи видят. Лучше всего ставить фон таким образом, если же у вас есть причины не делать так.
Обратите внимание, что только настройка фона в CSS не имеет желаемого эффекта.