Радж
С пониманием у меня действительно туго. И я подозревал, что проблема с DOM. Можно ли как-то в решить правильно эту проблему, без костылей?
Danila
перед подпиской на событие клика быть гарантированно уверенным, что элемент li есть в DOM
Vadim
С пониманием у меня действительно туго. И я подозревал, что проблема с DOM. Можно ли как-то в решить правильно эту проблему, без костылей?
Советую поставить побольше логов и использовать devtron, чтобы отслеживать IPC. А так полностью поддерживаю сообщения выше.
Радж
О, класс ))) Спасибо всем!!!
Радж
Я пробую клики вынести в отдельную функцию и добавлять ее в li - onclick="myFunction()"
Радж
ПЛОХАЯ ИДЕЯ ! Прилетела ошибка - Refused to execute inline event handler because it violates the following Content Security Policy directive: "script-src 'self'". Either the 'unsafe-inline' keyword, a hash ('sha256-...'), or a nonce ('nonce-...') is required to enable inline execution.
Vadim
А слушатель ставишь когда? Поставь лог до того как ставить слушатель, выведи сам элемент
Радж
А слушатель ставишь когда? Поставь лог до того как ставить слушатель, выведи сам элемент
Первый элемент, до того как я начинаю передавать реальные данные выводит. Т.е. "обвал" происходит после добавления реальных данных. Тогда ни первый "искусственный" элемент ни все остальные не срабатывают .
Danila
Я думаю, что вам всё-таки не в Electron-сообщество. В данном случае данные из IPC можно получить через fetch/xhr и будет то же самое
Радж
Если бы это был обычный web, проблем бы не было. Скорее всего это таки связанно с электроном, вернее с тем как он работает с DOM. Я попробовал добавить один элемент из render.js, он работает с событиями даже после добавления настоящих. Думаю jq работает с dom круче )
Радж
Может vue прикрутить. Есть у кого опыт добавление в готовый проект? Это возможно?
Danila
Вы решите проблемы с пониманием JavaScript и всё будет хорошо
Danila
вы сейчас пытаетесь решить проблему неподходящего шурупа другой отверткой
Радж
Я понимаю, что это по определению не может быть. Если бы я все делал в web, работало безотказно . Но тут я столкнулся с тем, что противоречит моему опыту. Можно я тут приведу кусочки кода?
Oleh
Я вообще честно так и не понял в чем проблема
Oleh
Конечно можно, лучше всего на каком-то плейграунде, типо codepen
Радж
Там использую стороннюю библиотеку
Радж
// main.js . . . const { promiseIpcMain } = require('promisify-electron-ipc'); promiseIpcMain .send("info", mainWindow.webContents, info) .then(answer => console.log(answer)); . . . // render.js . . . const { promiseIpcRenderer } = require('promisify-electron-ipc'); var ul = document.getElementById("info-block"); promiseIpcRenderer.on("info", info => { ul.innerHTML += '<li class="info"><a type="button"> ' + info+ </a></li>' ); }); let informs = document.querySelectorAll(".info") if (informs != null) { for (i = 0; i < informs .length; i++) { informs[i].addEventListener('click', function() { alert("Yes!!") }); } } . . . // index.html . . . <ul id="info-block"> <script src="js/render.js"></script> . . .
Oleh
Мне непонятно где какие файлы вызываются, main.js в index.html, render.js
Радж
index.html открывается в main.js
Oleh
А main - это main process?
Радж
А main - это main process?
Да. У меня сложности с терминологией. Допиливаю почти готовый проект
Oleh
Вам надо скорее всего открывать index.html в render.js
Oleh
https://github.com/electron/electron-quick-start А можете сделать пример на этом шаблоне?
Радж
Не думаю. index.html, это главное окно. Вернее он грузится в главное окно при старте проекта
Boris
Кто-нибудь сталкивался с ошибкой UnhandledPromiseRejectionWarning: Error: An object could not be cloned ?
Oleh
Попробую
У меня все работает
Oleh
Сейчас скину
Danila
он должен быть Transferable. То есть приводиться к простому объекту (как JSON)
Danila
даже не Transferable (это между воркерками). Serializable
Oleh
Попробую
https://github.com/AleshaOleg/electron-quick-start
Oleh
npm i npm start
Oleh
Учтите, что я включил nodeIntegration что бы сделать импорт библиотеки. Это не безопастно
Oleh
У меня не сохранят изображения в версии с app store, кто-то сталкивался? Какого-то пермишена может не хватает?
Oleh
https://github.com/ubergrape/grape-electron/blob/master/build/entitlements.mas.plist#L21 Вроде бы все правильно у меня стоит
Electron.js releases
v11.0.0-nightly.20200610 https://github.com/electron/electron/releases/tag/v11.0.0-nightly.20200610 v11.0.0-nightly.20200610
Радж
https://github.com/AleshaOleg/electron-quick-start
Да, ваш вариант работает. Но это не тот случай. Я наверное очень устал искать решение, вот и сумбурно рассказал. У меня в main.js приходят данные с сервера. Я из main.js их отправляю в renderer.js const { promiseIpcMain } = require('promisify-electron-ipc'); promiseIpcMain .send("info", mainWindow.webContents, info) .then(answer => console.log(answer)); Уже из renderer.js я их добавляю их в index.html const { promiseIpcRenderer } = require('promisify-electron-ipc'); var ul = document.getElementById("info-block"); promiseIpcRenderer.on("info", info => { ul.innerHTML += '<li class="info"><a type="button"> ' + info+ </a></li>' ); }); let informs = document.querySelectorAll(".info") if (informs != null) { for (i = 0; i < informs .length; i++) { informs[i].addEventListener('click', function() { // Это событие клика alert("Yes!!") }); } } Это в index.html <ul id="info-block"></ul> <script src="js/render.js"></script> То есть у меня происходит динамическое добавление li в ul Вот тут и проблема. Если я, как и вы, добавлю в index.html "готовый" li, то клик на него срабатывает до тех пор, пока туда не добавятся динамические данные. И больше клики не срабатывают.
Oleh
Ну это не проблема электрона
Oleh
Потому что события нужно навесить после того как дом отрисовался
Oleh
У вас в коде они только на начальном рендере добавляются
Oleh
Нужно делать тоже самое в callback
Oleh
Для события info
Danila
@RajPolinovsky
Радж
@RajPolinovsky
Да ............ СПАСИБО ОГРОМНОЕ ВСЕМ!!!!! Данила, вам отдельное спасибо ) Сделал так, как вы указали. И все заработало. Просто я не привык к таким не очевидным алгоритмам какие применяются в js.
Алексей
подскажите, установщик почему-то виснет в таком виде..Не пойму почему.
Алексей
Алексей
выяснил что это происходит после добавления параметра appId в конфиг билдера. Но почему так происходит - до сих пор не понятно
Радж
)
Алексей
Подскажите, почему добавление appId в конфиг билдера приводит к зависанию инсталятора?
Anonymous
А никто не сталкивался с тем, что globalshortcut ( https://www.electronjs.org/docs/api/accelerator ) не работает с просто одной кнопкой?
Anonymous
то есть CommandOrControl+A работает, а на "CommandOrControl" он плюется ошибкой
Danila
то есть CommandOrControl+A работает, а на "CommandOrControl" он плюется ошибкой
Интересный у вас хоткей, на функциональную клавишу )
Vadim
то есть CommandOrControl+A работает, а на "CommandOrControl" он плюется ошибкой
Для такого нужно слушать события клавиатуры
Vadim
Забыл как либа та называется, тут ее часто проклинали)
Danila
Ну и не по гайдам это
Danila
Anonymous
Интересный у вас хоткей, на функциональную клавишу )
Ну почему бы и нет. Хочу что-то делать на каждое нажатие
Vadim
Iohook
Да)
Vadim
Ну почему бы и нет. Хочу что-то делать на каждое нажатие
Ну учитывая что не первый день с Электрон, я не стал тебя уж учить)
Evgeny
Переезжаю на forge, вот и первый концептуальный вопрос подоспел, может кто знает ответ https://github.com/electron-userland/electron-forge/issues/1758
Илья
Пс пс Ребят А есть где ниб хорошие курсы или уроки по Электрону?
Electron.js releases
v11.0.0-nightly.20200611 https://github.com/electron/electron/releases/tag/v11.0.0-nightly.20200611 v11.0.0-nightly.20200611
Sergey F
потом на coursehunter можешь
Electron.js releases
v11.0.0-nightly.20200612 https://github.com/electron/electron/releases/tag/v11.0.0-nightly.20200612 v11.0.0-nightly.20200612
Electron.js releases
v9.0.4 https://github.com/electron/electron/releases/tag/v9.0.4 v9.0.4
Anonymous
Дратуте. Подскажите, насколько разумно при использовании базы ( lokijs, sqlite ) держать ее на стороне мейна, а все операции с базой проводить через ipc? Сейчас держу базу в рендере и столкнулся с проблемой синхронизации между несколькими окнами
Danila
Максимально разумно в рендере не держать ничего, кроме UI
Радж
Всем доброго времени суток ))) Простите за глупый вопрос, но если использовать в проекте sqlite3, нужно ли его устанавливать дополнительно? Спасибо )
Радж
Просто приложение будут раздавать как архив. Распаковали и запустили бинарник.
Oleh
Если electron-builder, то есть такая опция. https://www.electron.build/configuration/nsis#portable