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 fais 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 un bug dans chrome?
PS:
une partie de mon manifeste.json
"background": {
"scripts": ["background.js"]
},
"content_scripts": [
{
"matches": ["< all_urls >"],
"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?
- J'ai eu un problème similaire. Même si cela peut ne pas aider, assurez-vous que le 'background.js" est en fait le chargement. Mon problème est que j'ai utilisé "background.js" au lieu de "scripts/background.js'
- Pour sendMessage cas, cela se produit parce que vous n'auriez pas d'installation ( ou par erreur supprimé ), le onMessage auditeur dans le contexte de script. stackoverflow.com/a/54945389/1469614.
Vous devez vous connecter pour publier un commentaire.
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:
J'espère que cela fonctionne pour vous aussi.
background_page
plus Manifeste >= la version 2.0, de sorte que cette réponse ne fonctionne plus."background" : { "page" : "html/background.html" }
comme par developer.chrome.com/extensions/background_pages.htmlCe n'est pas toujours la cause, mais si vous avez une erreur dans votre
background.js
, vous devriez vérifier ce lien:dans la page "Extensions", qui vous montrera toute les erreurs JavaScript.
C'était m'empêcher de connexions de mise en place.
Le problème pourrait être que
etsendRequest()
ont été obsolète et remplacé paronRequest
sendMessage()
etonMessage
. 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 de mention
plus.sendRequest()
Voici un lien qui documente la changer un peu: http://codereview.chromium.org/9965005/
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:
J'ai essayé d'utiliser un
background.js
script avec le contenu suivant:Que résoudre le immédiate
onDisconnect
dans le contenu de mon script: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:Après un certain temps passé sur l'enquête, j'ai trouvé le problème dans mon cas.
Je suis aussi arriver:
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 je actualisation 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:
Maintenant mon code est:
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.
Je suis en utilisant sendMessage et onMessage pour la communication aussi, et dans mon travail, j'ai d'abord envoyer un message à partir injected.js à mon background.js et j'ai aussi eu "Port d'erreur: impossible d'établir la connexion. Fin de réception n'existe pas." erreur.
J'ai donc décidé de traiter à l'aide des réponses fonctionnalités ( comme ACK ), et si l'arrière-plan ne répond pas, j'essaie avec un setTimeout comme si.
//background.js
//injected.js
Mon code fonctionne maintenant correctement donc je pense que l'explication est facile à voir. Google Chrome n'est pas préparé Background.js et connexion fourre quand il injecter du code dans les pages où vous voulez, et donc personne n'écoute de votre message envoyé, donc si personne n'est à l'écoute, juste continuer à essayer, comme je le fais.
La confrontation avec le même problème aujourd'hui.
//C'est ici mon ancien background.js:
Vous le voyez, le chrome.moment de l'exécution.onMessage.addListener est déclenché lorsque l'événement onInstalled happpens, et quand je suis hors de ce périmètre, et de faire mon code comme ceci:
Il fonctionne bien maintenant. L'espoir d'être utile.
essayez d'injecter quelques contect scripts dans un onglet dont l'url est chrome://* ou https://chrome.google.com/* , lors de la connexion de ces onglets dans backgroundpage ,
par exemple
puis va jeter
ces pages permettent pas d'injecter des scripts de contenu, et la connexion se déconnecter immédiatement .
donc, de vérifier l'url et non la connexion de ces onglets ,alors, l'exception n'est pas jeté
Vérifier les derniers manuels:
http://developer.chrome.com/extensions/messaging.html
Fermer les onglets, laisser une seule page, et vérifier. Dans mon cas, cela a été la question.
J'ai vu cette erreur à l'aide de
manifest_version: 2
etchrome.runtime.sendMessage
. Je me connecte à partir d'une page web à l'extension au lieu de l'intérieur de l'extension.La solution était de m'assurer que j'avais les valeurs correctes dans la
externally_connectable.matches
tableau dans le manifeste.json. Vous devez indiquer l'Url que vous voulez être en mesure de se connecter à l'extension. Voir https://developer.chrome.com/extensions/manifest/externally_connectable#without-externally-connectable.Si vous obtenez le problème, surtout parce que vous faites référence au document obsolète, le mettre à jour!
Visite: extension chrome: messaging.html
J'ai été voir ce problème, où le contenu de mon script n'a pas été de chargement, de sorte que l'affichage d'un message n'a jamais été produit.
Le problème s'est avéré être que j'ai eu le fond de script inspecteur de l'open source et a été de simplement appuyer sur Cmd+R (refresh), mais il y avait un bug dans mon
manifest.json
. Quand je suis allé sur la page "extensions" et rechargé la page, j'ai eu l'alerte en montrant l'erreur manifeste.En gros, j'ai vu ce parce que mon contenu des scripts jamais chargé, en premier lieu, et j'ai pensé que j'étais rafraîchissante mon manifeste, mais je n'étais pas.
Pour manifester 2.0 et sendMessage cas, son assez simple:
Ce qui se passe si vous essayez d'utiliser
sendMessage
à l'intérieur de la popup et il n'y a pas d'auditeur de l'installation sur fond de fin du script ou de l'auditeur a en quelque sorte été supprimé.Par le listener je veux dire -
chrome.runtime.onMessage.addListener
.Je place
chrome.runtime.sendMessage
etchrome.runtime.onMessage.addEventListener
dans le contenu du script danswindow.onload
ou d'auto-exécution de la fonction et du travail.Et dans le manifeste-je utiliser
"background": {
"scripts": ["background.js"],
"persistent": false
},
manifest_version: 2.
Espérons que cela aide.