web-dev-qa-db-fra.com

Accéder à la variable de fenêtre depuis Content Script

J'ai une Chrome extension qui essaie de trouver sur chaque URL parcourue (et chaque iframe de chaque URL de navigateur) si une variable window.my_variable_name existe.

J'ai donc écrit ce petit morceau de script de contenu:

function detectVariable(){
    if(window.my_variable_name || typeof my_variable_name !== "undefined") return true;
    return false;
}

Après avoir essayé trop longtemps, il semble que les scripts de contenu s'exécutent dans un bac à sable.

Existe-t-il un moyen d'accéder à l'élément window à partir d'un script de contenu Chrome?

23
François Pérez

Il est important de savoir que les scripts de contenu partagent le même DOM que la page actuelle, mais ils ne partagent pas l'accès aux variables. La meilleure façon de traiter ce cas est, à partir du script de contenu, d'injecter une balise de script dans le DOM actuel qui lira les variables de la page.

dans manifest.json:

"web_accessible_resources" : ["/js/my_file.js"],

dans contentScript.js:

function injectScript(file, node) {
    var th = document.getElementsByTagName(node)[0];
    var s = document.createElement('script');
    s.setAttribute('type', 'text/javascript');
    s.setAttribute('src', file);
    th.appendChild(s);
}
injectScript( chrome.extension.getURL('/js/my_file.js'), 'body');

dans mon_fichier.js:

// Read your variable from here and do stuff with it
console.log(window.my_variable);
58
François Pérez