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-версии будет исправление, то мы перенесём его.
Для получения дополнительной информации, пожалуйста, просмотрите Введение в обеспечение безопасности.
Когда Electron получит последнее обновление Node.js?
После выпуска новой версии Node.js, мы обычно ждем примерно месяц до обновления в Electron. Это помогает избежать ошибок, которые присутствуют в новых версиях Node.js, что случается довольно часто.
Новые возможности Node.js обычно входят в обновления V8, так как Electron использует V8, поставляемый с браузером Chrome, новейшие возможности JavaScript в новой версии Node.js обычно уже входят в Electron.
Как передавать данные между страницами?
Для передачи данных между веб-страницами (графическими процессами) самым простым способом является использование HTML5 API, который уже доступен в браузерах. Good candidates are Storage API, localStorage
, sessionStorage
, and IndexedDB.
В качестве альтернативы вы можете использовать IPC примитивы, предоставленные Electron. Чтобы передавать данные между главным процессом и процессом рендерера, вы можете использовать ipcMain
and ipcRenderer
. 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 не имеет желаемого эффекта.