570 votes

Utiliser un contenu script pour accéder aux variables et fonctions du contexte de la page.

J'apprends à créer des extensions pour Chrome. Je viens de commencer à en développer une pour capter les événements de YouTube. Je veux l'utiliser avec le lecteur flash de YouTube (plus tard, j'essaierai de le rendre compatible avec HTML5).

manifest.json :

{
    "name": "MyExtension",
    "version": "1.0",
    "description": "Gotta catch Youtube events!",
    "permissions": ["tabs", "http://*/*"],
    "content_scripts" : [{
        "matches" : [ "www.youtube.com/*"],
        "js" : ["myScript.js"]
    }]
}

myScript.js :

function state() { console.log("State Changed!"); }
var player = document.getElementById("movie_player");
player.addEventListener("onStateChange", "state");
console.log("Started!");

Le problème est que la console me donne le "Commencé !" mais il n'y a pas de "L'État a changé !" lorsque je joue/pause des vidéos YouTube.

Lorsque ce code est mis dans la console, il a fonctionné. Qu'est-ce que je fais de mal ?

19 votes

Essayez d'enlever les guillemets autour du nom de votre fonction : player.addEventListener("onStateChange", state);

4 votes

Il est également à noter que lors de la rédaction des correspondances, n'oubliez pas d'inclure https:// o http:// ce www.youtube.com/* ne vous laisserait pas emballer l'extension et jetterait Erreur de séparateur de schéma manquant

1 votes

3voto

Tarmo Saluste Points 153

Si vous souhaitez injecter une fonction pure, au lieu d'un texte, vous pouvez utiliser cette méthode :

function inject(){
    document.body.style.backgroundColor = 'blue';
}

// this includes the function as text and the barentheses make it run itself.
var actualCode = "("+inject+")()"; 

document.documentElement.setAttribute('onreset', actualCode);
document.documentElement.dispatchEvent(new CustomEvent('reset'));
document.documentElement.removeAttribute('onreset');

Et vous pouvez passer des paramètres (malheureusement pas d'objets ni de tableaux pouvant être stringifiés) aux fonctions. Ajoutez-le dans les baretheses, comme ceci :

function inject(color){
    document.body.style.backgroundColor = color;
}

// this includes the function as text and the barentheses make it run itself.
var color = 'yellow';
var actualCode = "("+inject+")("+color+")";

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X