0

J'ai essayé pendant un certain temps mais je suis incapable d'appeler des méthodes sur mon fichier js de la page d'arrière-plan.Extension Chrome Impossible d'appeler des méthodes en arrière-plan page

Mes regards manifeste comme ceci:

{ 
    "name" : "First chrome extension", 
    "version" : "0.0.1", 
    "manifest_version" : 2, 
    "browser_action" : { 
    "default_title" : "Practice", 
    "default_icon" : { 
     "16" : "assets/images/icon16.png", 
     "24" : "assets/images/icon24.png", 
     "32" : "assets/images/icon32.png" 
    }, 
    "default_popup" : "popup.html" 
    }, 
    "background" : { 
    "scripts" : ["background.js"] 
    }, 
    "content_scripts" : [{ 
    "matches" : ["*://*/*"], 
    "js" : [ 
     "assets/js/jquery-3.2.1.slim.min.js", 
     "assets/js/content.js" 
    ] 
    }], 
    "permissions" : [ 
    "activeTab", 
    "storage" 
    ] 
} 

background.js:

function test() 
{ 
    return 'called'; 
} 

actifs/js/popup.js:

console.log(chrome.extension.getBackgroundPage().test()); 

La plupart des exemples que je Scie la méthode chrome.extension.getBackgroundPage pour récupérer l'arrière-plan mais chaque fois que j'essaie cette méthode, elle me dit la méthode ou tout L'autre variable que j'ai définie dans background.js n'est pas définie et n'est pas présente dans l'objet fenêtre retourné.

J'ai aussi essayé d'utiliser l'API de messagerie comme ceci: background.js

"use strict"; 

const test = function() { 
    console.log(1); 
} 

chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse){ 
    console.log(request); 
    if(request.msg.toLowerCase() === "bg-test") test(); 
    } 
); 

actifs/js/popup.js:

$(function() { 
    const btn = '#en-dis-btn'; 
    $(btn).click(function(e){ 
    e.preventDefault(); 
    chrome.runtime.sendMessage({'msg' : 'bg-test'}, function(response) { 
     console.log(response); 
    }); 
    }); 
}); 

mais l'auditeur dans background.js est jamais appelé . Que pourrais-je faire de mal? La page d'arrière-plan n'est pas nulle, donc elle charge quelque chose.

+0

1) '" scripts ": [" background.js "]' devrait utiliser 'assets/js/background.js' - est-ce une faute de frappe? 2) vous n'envoyez aucune réponse via sendResponse dans l'écouteur. 3) commencez à utiliser le débogueur devtools: définissez des points d'arrêt dans la page d'arrière-plan et dans la fenêtre contextuelle, exécutez le code et voyez ce qui se passe. 4) assurez-vous de recharger l'extension sur chrome: // extensions page 5) et juste au cas où, [Google Chrome/Firefox ne voit pas la sortie de l'extension dans la console] (// stackoverflow.com/a/38920982) – wOxxOm

+0

@wOxxOm it était une faute de frappe, mais c'était juste dans le code, je l'ai juste écrit mal ici. 2) Je suis conscient, j'ai juste besoin que les logs de la console soient exécutés pour l'instant mais cela ne va même pas jusqu'à ce point. 3) Je définirai des points d'inflexion en arrière-plan et vers vous 4) Toujours recharger et utiliser la console d'extension afin de voir les bûches. – InfinityCounter

+0

J'ai réussi à supprimer les extensions et à les ajouter et la messagerie a fonctionné mais je ne comprends toujours pas pourquoi je n'arrive pas à obtenir la méthode getBackgroundPage(), c'est mon problème – InfinityCounter

Répondre

1

Selon le ECMA specification:

let et const déclarations définir des variables qui sont étendus à LexicalEnvironment du contexte d'exécution en cours d'exécution.

Lorsque vous déclarez un let/variables const globalement dans une page (la page d'arrière-plan), LexicalEnvironment est scope cette page de this mondiale (ce qui équivaut à window de la page) de la variable et une autre page (la fenêtre) est clairement en dehors de cette ampleur.

Utilisez var foo = bar ou function foo() {} déclaration, qu'il expose comme propriété de l'objet window il est visible dans un autre de même origine chrome-extension://*extensionID* page, comme la page popup.