Подтвердить что ты не робот

Применение бесконечного цикла с ошибкой processMessage

Приложение My Cordova не работает в браузере и мобильном устройстве, оно показывает ошибку

processMessage не удалось

Скриншот:

enter image description here

и идет бесконечный цикл, и он замораживает устройство любым решением?

Этот вопрос уже задан здесь Кордова не работает нормально, но ответа нет, поэтому я должен снова спросить его.

4b9b3361

Ответ 1

Получение той же самой проблемы (с использованием Chrome с эмулятором рабочего стола телефона. Что я вижу, так это.

Кажется, в Cordova.js есть ошибка, которая не может проверить пустое сообщение. Когда приложение отправляет оповещения: gap_init: 2 Зазор: [0, "StatusBar", "_ готов", "StatusBar1593157203" ] Разрыв: [0, "приложение", "показать", "App1593157204" ] Зазор: [0, "Файл", "requestAllPaths", "File1593157205" ] Зазор: [0, "NetworkStatus", "getConnectionInfo", "NetworkStatus1593157206" ] Зазор: [0, "Device", "getDeviceInfo", "Device1593157207" ]

и вы просто нажмете "ОК", вместо того чтобы очистить содержимое этого диалогового окна, которое оно вызывает, чтобы вызвать бесконечный loooooop. Я не знаю значения этих сообщений, потому что я довольно новичок в Кордове, но, черт возьми, ушел из принципа наименьшего удивления!

Таким образом, вы можете очистить сообщения или изменить код cordova.js, где он застревает в цикле. Вы также можете отключить предупреждения, которые также работают.

функция processMessage() (см. ниже) не проверяет пустую строку, которая сама по себе может быть прекрасной, но она вызывается из цикла while, который проверяет только "*", если он собирается поп,

while (messagesFromNative.length) {
            var msg = popMessageFromQueue();
            // The Java side can send a * message to indicate that it
            // still has messages waiting to be retrieved.
            if (msg == '*' && messagesFromNative.length === 0) {
                setTimeout(pollOnce, 0);
                return;
            }
            processMessage(msg);
        }

// Processes a single message, as encoded by NativeToJsMessageQueue.java.
    function processMessage(message) {
        try {
            var firstChar = message.charAt(0);
            if (firstChar == 'J') {
                eval(message.slice(1));
            } else if (firstChar == 'S' || firstChar == 'F') {
                var success = firstChar == 'S';
                var keepCallback = message.charAt(1) == '1';
                var spaceIdx = message.indexOf(' ', 2);
                var status = +message.slice(2, spaceIdx);
                var nextSpaceIdx = message.indexOf(' ', spaceIdx + 1);
                var callbackId = message.slice(spaceIdx + 1, nextSpaceIdx);
                var payloadKind = message.charAt(nextSpaceIdx + 1);
                var payload;
                if (payloadKind == 's') {
                    payload = message.slice(nextSpaceIdx + 2);
                } else if (payloadKind == 't') {
                    payload = true;
                } else if (payloadKind == 'f') {
                    payload = false;
                } else if (payloadKind == 'N') {
                    payload = null;
                } else if (payloadKind == 'n') {
                    payload = +message.slice(nextSpaceIdx + 2);
                } else if (payloadKind == 'A') {
                    var data = message.slice(nextSpaceIdx + 2);
                    var bytes = window.atob(data);
                    var arraybuffer = new Uint8Array(bytes.length);
                    for (var i = 0; i < bytes.length; i++) {
                        arraybuffer[i] = bytes.charCodeAt(i);
                    }
                    payload = arraybuffer.buffer;
                } else if (payloadKind == 'S') {
                    payload = window.atob(message.slice(nextSpaceIdx + 2));
                } else {
                    payload = JSON.parse(message.slice(nextSpaceIdx + 1));
                }
                cordova.callbackFromNative(callbackId, success, status, [payload], keepCallback);
            } else {
                console.log("processMessage failed: invalid message: " + JSON.stringify(message));
            }
        } catch (e) {
            console.log("processMessage failed: Error: " + e);
            console.log("processMessage failed: Stack: " + e.stack);
            console.log("processMessage failed: Message: " + message);
        }
    }

Ответ 2

Проверьте правильность загрузки кордовы js? является ли правильный путь для кордовы js?

укажите путь в этом index.html:

<script type="text/javascript" src="cordova.js">