Chrome : comment corriger l'erreur The message port closed before a response was received ?

Le navigateur Chrome reçoit régulièrement des mises à jour de la part des équipes de Google. Certaines obligent les développeurs d’extensions à ajuster leur code, car le navigateur peut renvoyer des messages d’erreur. C’est notamment le cas pour ce message d’erreur : "The message port closed before a response was received".

En effet, ce message d'erreur est spécifique au navigateur Chrome et plus précisément au développement d'une extension pour ce navigateur. Il s'affiche lorsque vous utilisez la promesse "browser.runtime.onMessage". Cet évènement permet d'écouter les messages envoyés par un autre élément d'une extension que vous utilisez. Si la fonction que vous définissez ne renvoie pas de promesse avec un message, alors vous obtiendrez ce message d'erreur dans la console.

Vous n'êtes pas en train de travailler sur une extension Chrome ? Ou vous n'êtes pas développeur ? Alors ce message provient d'une des extensions du navigateur que vous avez installé sur votre ordinateur. Désactivez une par une les extensions pour trouver de laquelle provient le message d'erreur.

Si vous êtes en train de travailler sur le développement de votre extension de navigateur, alors vous devez modifier votre code afin de toujours renvoyer une promesse avec un message dans votre fonction, même si ce n'est pas utile. Cela enlèvera le message d'erreur dans la console du navigateur.

// background.js
browser.runtime.onMessage.addListener(message => {
  //Votre traitement est ici
  // Ajoutez cette ligne :
  return Promise.resolve("Réponse pour éviter une erreur dans la console"),
}),

Une autre solution peut être de faire appel au mot-clé "async" pour retourner implicitement une promesse avec un message, qui aura comme valeur "Undefined".

// background.js
browser.runtime.onMessage.addListener(async message => {
  console.log("background: onMessage", message),
}),

JavaScript