Chrome ошибка расширения "Не проверено runtime.lastError: Порт сообщения закрыт до получения ответа" - PullRequest
0 голосов
/ 26 января 2020

Я пытаюсь просто вызвать функцию в фоновом режиме. js из всплывающего окна. js. Тем не менее, я получаю «Unchecked runtime.lastError: Порт сообщения закрыт до получения ответа». ошибка.

Мое первоначальное сообщение «Рукопожатие» работает без ошибок, но мое «AnotherMessage» получает ошибку выше.

Я пытаюсь следовать документации onMessage и sendMessage, найденной здесь но я могу делать что-то не так.

всплывающее окно. js

//works perfectly fine
chrome.runtime.sendMessage({msg:"Handshake"}, response => {
    if(response.error){
        console.log(response);
    }
});

//Gives error message
chrome.runtime.sendMessage({msg:"AnotherMessage"}, response => {
    if(response.error){
        console.log(response);
    }
});

Причина, по которой я хочу два 'sendMessage', заключается в том, что я хочу выполнять заданные c функции в фоновом режиме. js в зависимости от определенных логов c.

фон. js

chrome.runtime.onMessage.addListener((request,sender,sendResponse){
if(request.msg === "Handshake"){
    //Do something
} else if (request.msg === "AnotherMessage") {
    //Do something else
   }
});

ОБНОВЛЕНИЕ: добавить немного контекста, у меня в основном есть две формы в моем расширении. Я хочу отправить данные при отправке формы в мою базу данных, поэтому при отправке ' form-1 ' выполняется function-1 'и' form-2 ' представление должно выполнить ' function-2 ' в фоновом режиме. js. Я пытаюсь добиться выполнения различных функций через sendMessage и onMessage.

1 Ответ

0 голосов
/ 28 января 2020

В фоновом скрипте, если вы вызываете sendResponse асинхронным, вы должны вернуть true из функции обратного вызова

 chrome.runtime.onMessage.addListener((request,sender,sendResponse){
    if (request.msg === "Handshake"){
        //Do something
    } else if (request.msg === "AnotherMessage") {
        //Do something else
   }
   return true;   
});
...