Envoi de message à partir de popup.js en extension Chrome pour background.js
Quelle est la bonne façon d'envoyer un message (et obtenir une réponse) à background.js à partir de popup.js dans une extension Chrome? Chaque méthode que j'ai essayer se termine avec une erreur:
"Port: impossible d'établir la connexion. Fin de réception n'existe pas."
Je préfère utiliser google chrome.l'extension.sendMessage() sur chrome.l'extension.connect() avec le port.postMessage(), mais ni la méthode semble avoir fonctionné.
Ce que je suis en train de faire est de câbler un bouton dans le popup.html pour appeler en javascript dans popup.js ce qui revient à background.js dans un effort pour obtenir plus de renseignements sur currentTab() qui a été le plus en haut (c'est à dire:pour obtenir l'URL de la chaîne à afficher dans la popup.html)
Maintenant dans popup.js (par câble à l'action du bouton) j'ai:
function getURL()
{
chrome.extension.sendMessage({greeting: "GetURL"},
function(response) { tabURL = response.navURL });
$("#tabURL").text(tabURL);
}
Dans background.js j'ai:
chrome.extension.onMessage.addListener( function(request,sender,sendResponse)
{
if( request.greeting == "GetURL" )
{
var tabURL = "Not set yet";
chrome.tabs.getCurrent(function(tab){
tabURL = tab.url;
});
sendResponse( {navURL:tabURL} );
}
}
Des idées?
- voir cette réponse sur stackoverflow.com/questions/13546778/...
Vous devez vous connecter pour publier un commentaire.
Juste pour clarifier, nous parlons de la communication entre les popup page de browserAction et le fond de script?
De toute façon vous avez un certain nombre d'erreurs dans votre code.
Première votre ignorent totalement le fait que tous les rappels dans chrome api sont asynchrone.
En arrière-plan de la page
Même dans popup.js
Deuxième erreur est que
chrome.tabs.getCurrent
ne vous donne pas l'onglet en cours sélectionné par l'utilisateur dans la fenêtre principale. Le docs dit:De sorte que vous aurez pas défini pour l'ensemble de vos demandes, parce que vous l'appeler en arrière-plan de la page. Ce que vous devez faire est d'utiliser la méthode le chrome.onglets.requête à obtenir actuellement onglets actifs.
Ainsi, après la fixation de tous les problèmes nouveau code devrait ressembler à quelque chose comme ceci:
background.js
popup.js