В настоящее время я работаю над электронным приложением, которое по сути является пусковой установкой DDNS для управления сервером, которым я управляю. В основном, он проверяет подключение к Интернету, получает текущий IP-адрес для сервера, а затем открывает его в браузере по умолчанию. Однако всплывающий экран, который я написал, полностью сломан.
Всякий раз, когда я запускаю приложение в своей системе (используя npm из терминала), он загружает фрейм, но изображение замораживает загрузку примерно на 1/3 точки. Он не будет загружать оставшуюся часть изображения, пока скрипт не завершит выполнение его в нижней части основной HTML-страницы.
Есть что-то, что мне не хватает? При необходимости я могу предоставить отрывки кода.
Исходный код:
<script>
function wait(ms) {
var start = new Date().getTime();
var end = start;
while (end < start + ms) {
end = new Date().getTime();
}
}
const isOnline = require('is-online');
const isReachable = require('is-reachable');
const {
shell
} = require('electron');
window.onload = function() {
// Main Script
console.log('before');
wait(3000);
document.getElementById('progresstext').innerHTML = "Testing connection...";
bar.animate(0.15); // Number from 0.0 to 1.0
wait(250);
var amIOnline = false;
if (isOnline()) {
amIOnline = true;
}
console.log("Internet Test Ran");
if (!amIOnline) {
document.getElementById('errortext').innerHTML = "ERROR: No internet connection. Check the internet connection.";
document.getElementById('progresstext').innerHTML = "ERROR";
}
var isEmbyReachable = false;
if (isReachable('******')) {
isEmbyReachable = true;
document.getElementById('progresstext').innerHTML = "Connection Test: Passed";
//=> true
}
//Open Emby in the default browser
if (amIOnline && isEmbyReachable) {
shell.openExternal("*****");
}
};
</script>
Ссылка Pastebin на полный источник: https://pastebin.com/u1iZeSSK
Спасибо
Характеристики системы разработки: macOS Mojave 10.14, Последняя стабильная сборка электрона
Проблема заключается в вашей функции wait
, так как узел js является потоком в сигле, функция ожидания блокирует ваш процесс. Вы можете попробовать следующий код. Но я действительно рекомендую вам взглянуть на то, как писать асинхронные функции в JavaScript и setInterval и setTimeout в качестве запуска.
Но на время вы можете попробовать этот код.
window.onload = function () {
// Main Script
console.log('before');
// wait 3 seconds
setTimeout(function () {
document.getElementById('progresstext').innerHTML = "Testing connection...";
bar.animate(0.15); // Number from 0.0 to 1.0
// wait 250 mills
setTimeout(function () {
var amIOnline = false;
if (isOnline()) {
amIOnline = true;
}
console.log("Internet Test Ran");
if (!amIOnline) {
document.getElementById('errortext').innerHTML = "ERROR: No internet connection. Check the internet connection.";
document.getElementById('progresstext').innerHTML = "ERROR";
}
var isEmbyReachable = false;
if (isReachable('******')) {
isEmbyReachable = true;
document.getElementById('progresstext').innerHTML = "Connection Test: Passed";
//=> true
}
//Open Emby in the default browser
if (amIOnline && isEmbyReachable) {
shell.openExternal("*****");
}
}, 250)
}, 3000)
};
Вы не можете пока или какие-либо другие блокирующие циклы ждать в JavaScript, поскольку он блокирует все другие исполнения, включая рендеринг страниц.