64 votes

Port d'erreur: impossible d'établir la connexion. Fin de réception n'existe pas. Dans Chromiume

Je suis le développement d'une extension dans Chrome, et il y a un problème. Dans mon inject.js,- je faire une requête du type:

chrome.extension.sendRequest({command:'skip'},callback)

et dans ma " background.js j'ai simplement ajouter une demande Auditeur comme:

chrome.extension.onrequest.addListener(function(req,sender,res){console.log("procession"})

Mais il y a une erreur:

Port d'erreur: impossible d'établir la connexion. Fin de réception n'existe pas

Il semble qu'un bug dans chrome? PS:
une partie de mon manifeste.json

"background": {
    "scripts": ["background.js"]
  },
  "content_scripts": [
    {
      "matches": ["&lt all_urls &gt"], 
      "js": ["inject.js"]
    }
  ],

Je suis en Chrome 17, et j'ai essayé de recharger l'extension, la réouverture du navigateur... rien ne s'est passé
quelqu'un obtenir quelques idées?

23voto

Neil Points 5343

Ce n'est pas toujours la cause, mais si vous avez une erreur dans votre background.js, vous devriez vérifier ce lien:

Inspect views: _generated_background_page.html

dans la page "Extensions", qui vous montrera toute les erreurs JavaScript.

Ce fut la prévention de mes connexions de mise en place.

13voto

Jannes Points 969

Le problème pourrait être que sendRequest() et onRequest ont été obsolète et remplacé par sendMessage() et onMessage. Depuis une récente mise à jour de Chrome 20 ils semblent avoir disparu complètement.

La documentation officielle sur la transmission de Message n'a même pas mentionner sendRequest() plus.

Voici un lien qui documente la changer un peu: http://codereview.chromium.org/9965005/

12voto

Jasper Points 154

Je me suis trouvé avoir le même problème que vous décrivez ici. La solution que j'ai trouvé qui fonctionne pour moi est d'utiliser un backgroundpage au lieu d'un fond de script, comme suit:

"background_page": "src/background.html",
  // maybe this seems to work instead of background { scripts [] }

  /* this gives a Port error: Could not ...
  "background": {
  "scripts": ["src/background.js"]
  },
  */

J'espère que cela fonctionne pour vous aussi.

5voto

sompylasar Points 71

Un HTML page d'arrière-plan ne fonctionne pas pour moi en Chrome 20.0.1132.57 m sur Windows 7 avec le même message d'erreur:

Port error: Could not establish connection. Receiving end does not exist. miscellaneous_bindings:232

J'ai essayé d'utiliser un background.js script avec le contenu suivant:

chrome.extension.onConnect.addListener(function(port) {
    port.onMessage.addListener(function(msg) {
        // May be empty.
    });
});

Qui a résolu l'immédiat, onDisconnect dans le contenu de mon script:

port = chrome.extension.connect();
port.onDisconnect.addListener(function (event) {
    // Happened immediately before adding the proper backend setup.
    // With proper backend setup, allows to determine the extension being disabled or unloaded.
});

Le bon code est entré à partir de Chrome Extensions de messagerie exemple: http://src.chromium.org/viewvc/chrome/trunk/src/chrome/common/extensions/docs/examples/api/messaging/timer/page.js?view=markup

L'exemple contient également de la deuxième partie qui sert d'interface pour sendRequest, mais je ne l'ai pas testé moi-même:

chrome.extension.onRequest.addListener(
    function(request, sender, sendResponse) {
        // Don't know if it may be empty or a sendResponse call is required.
    });

1voto

darkyndy Points 245

Après un certain temps passé sur l'enquête, j'ai trouvé le problème dans mon cas.

Je suis également d'obtenir:

Port error: Could not establish connection. Receiving end does not exist. 

Avant d'expliquer, je tiens à dire que je suis en utilisant sendMessage et onMessage pour la communication.

Pour moi, cette erreur apparaît quand je suis à l'envoi d'un message à partir de la page d'arrière-plan à un onglet où le contenu de mon script est en cours d'exécution.

Mon extension ne fonctionne que sur les onglets où youtube est ouvert. Alors, quand je suis à la modification de certaines préférences, je suis à la recherche pour voir ce que les onglets j'ai ouvert et envoyer un message de mise à jour mise à jour de préférence.

Dans un cas normal, il fonctionne très bien, mais si j'ai n (n >= 1) onglets avec youtube ouvrir. J'cliquez dans le bouton "Reload" pour l'extension, je changer quelque chose ... youtube onglets ne sont pas actualisés et ils ont perdu l'auditeur de message donc je reçois cette erreur.

Il semble que c'est assez normal.

Si j'actualise youtube onglets après l'extension de recharger je n'ai pas cette erreur.

J'ai trouvé une solution, il peut ne pas s'appliquer dans tous les cas:

Quand j'ai eu ce problème, mon code est:

chrome.tabs.sendMessage(tabId, {proprName: proprName, newValue: newValue}, function(response) {});

Maintenant, mon code est:

chrome.tabs.sendMessage(tabId, {proprName: proprName, newValue: newValue});

Pour ma je n'ai pas besoin de réponse rappel, et parce que ce n'était pas de répondre, j'ai eu cette erreur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X