le chrome.l'extension.onMessage.addListener Impossible de lire la propriété 'onMessage' undefined
Dans le background.html
:
chrome.tabs.query({active:true, currentWindow:true},function(tabs){
chrome.tabs.sendMessage(tabs[0].id,"target.js");
});
Dans le content.js
:
chrome.extension.onMessage.addListener(function(msg,sender,sendResponse){
if (msg == "target.js"){
extensionID = sender.id;
}
});
Toutefois, il ne fonctionne pas;
Uncaught TypeError: Cannot read property 'onMessage' of undefined
Comment faire?
- Êtes-vous à l'aide de Chrome 19 ou plus bas? Est
content.js
un contenu de script? - Je suis en utilisant google chrome 21. content.js est un contenu de script et il est injecté à l'onglet en cours par un autre contenu du script.
Vous devez vous connecter pour publier un commentaire.
Vous avez dit "content.js est un contenu de script et il est injecté à l'onglet en cours par un autre contenu du script.".
C'est votre problème. Injecté scripts sont exécutés dans le contexte d'une page (comme si ils ont été créés par la page elle-même), et donc ils n'ont pas accès à l'extension Chrome Api.
Vous pouvez utiliser un événement personnalisé ou
postMessage
pour communiquer entre la page et le contenu du script, qui à son tour communique avec l'arrière-plan de la page.Par exemple, voir cet exemple de base:
Je pense que vous voulez utiliser
content.js
comme un véritable contenu du script si, au lieu de l'injection de script. Si vous voulez savoir les différences entre injecté des scripts et des scripts de contenu, voir Extension Chrome code vs Contenu des scripts vs Injecté scripts.Il semble que vous essayez de faire un peu d'action à l'onglet en cours. Êtes-vous sûr que vous avez besoin d'un message pour le faire? Je suis en supposant que background.html votre extension est l'arrière plan de la page et content.js votre contenu est-il un script. Maintenant, j'ignore l'background.html page et simplement exécuter un fichier javascript pour mon fond de page. Mon manifeste.json page devrait ressembler à quelque chose comme ça.
Dans cette page, j'ai ajouter des messages d'auditeurs à mon fond de page puisque c'est le seul moyen que je connaisse pour interagir avec l'background.js fichier. Dans votre cas, cependant, c'est la page d'arrière-plan que faire de l'action, par conséquent, vous pouvez utiliser le chrome.onglet méthode pour modifier l'onglet directement. Au lieu de onMessage, vous pouvez essayer quelque chose de executeScript où la InjectDetails est le javascript ou celui que vous voulez exécuter.
Voir plus sur que ICI.