"observer" sur "MutationObserver': paramètre 1 est de type "Nœud"

Je suis entrain de créer une extension Chrome et d'essayer de comprendre un petit texte à côté du bouton d'envoi de l'e-mail de composer de la boîte.

Je suis à l'aide d'un MutationObserver à savoir lors de la composition d'une fenêtre de la boîte s'affiche. Je fais cela par l'observation d'un élément avec la classe no depuis la composition de la boîte de l'élément est créé comme enfant de cet élément (classe no).

Lorsque l'utilisateur clique sur le bouton "nouveau message" et de la composition de la boîte de fenêtre s'affiche, puis-je placer un élément à côté du bouton d'envoi à l'aide de la .after() méthode. Bouton ENVOYER le nom de classe est .gU.Up.

Ce sont les vrais noms de classe de gMail et assez bizarre aussi.

Ci-dessous c'est le code que j'utilise:

var composeObserver = new MutationObserver(function(mutations){ 
    mutations.forEach(function(mutation){
        mutation.addedNodes.forEach(function(node){
            $(".gU.Up").after("<td> <div> Hi </div> </td>");
        });
    });
});

var composeBox = document.querySelectorAll(".no")[2];
var config = {childList: true};
composeObserver.observe(composeBox,config);

Le problème est que j'ai toujours le message d'erreur suivant:

Uncaught TypeError: Failed to execute 'observe' on 'MutationObserver': parameter 1 is not of type 'Node'

Peut aider quelqu'un? J'ai essayé pas mal de choses et on a également examiné d'autres réponses ici, mais je suis encore incapable de se débarrasser de cette erreur.

Voici mon manifeste.json fichier:

{
    "manifest_version": 2,
    "name": "Gmail Extension",
    "version": "1.0",

    "browser_action": {
        "default_icon": "icon19.png",   
        "default_title": "Sales Analytics Sellulose"    
    },

    "background": {
        "scripts": ["eventPage.js"],
        "persistent": false
    },

    "content_scripts": [
    {
        "matches": ["https://mail.google.com/*"],
        "js": ["jquery-3.1.1.js", "insQ.min.js", "gmail_cs.js"]
    }
],

    "web_accessible_resources":[
        "compose_icon.png",
        "sellulosebar_icon.png" 
    ]
}

P. S. j'ai déjà essayé le insertionquery de la bibliothèque, mais il a quelques défauts. Il ne me laisse pas être spécifique à des changements dans l'élément spécifique. Je suis encore à essayer de le mutationsummary de la bibliothèque, mais depuis qu'il utilise MutationObserver, j'ai pensé que le problème persistera.

Ajouté de commentaire:
Il est vrai que le sélecteur n'est pas en me donnant un nœud. J'ai vérifié dans la console, c'est de donner à un objet. J'ai aussi vérifié dans la console et c'est la sélection de l'élément que je veux être observée.

Cependant, lorsque j'ajoute console.log pour l'élément sélectionné, qu'il les montre comme indéfini. Ce qui signifie, vous avez probablement raison sur le code exécuté avant les nœuds de venir à l'existence. Pouvez-vous me dire comment assurez-vous le retard qui se passe? va 'setTimeout travail? Comment ça fonctionne dans le cas de MutationObserver?

L'erreur c'est évident que le résultat de document.querySelectorAll(".no")[2] ne pas évaluer à un Node. Vous aurez besoin de regarder la structure de la page pour déterminer la façon de sélectionner le Nœud approprié. Il est possible/probable que votre code est en cours d'exécution avant de les nœuds que vous avez envie de retrouver existant dans les DOM. Si oui, vous aurez besoin de retarder l'ajout de l'observateur jusqu'à ce qu'ils existent (de nombreuses méthodes pour le faire).
merci @Makyen j'ai ajouté le fichier manifeste. Il est vrai que le sélecteur n'est pas en me donnant un nœud et j'ai vérifié dans la console, c'est de donner à un objet. J'ai aussi vérifié dans la console et c'est la sélection de l'élément que je veux être observée. <br/><br/>Cependant, lorsque je ajouter de la console.le journal de l'élément sélectionné, ça vient comme indéfini. Ce qui signifie, vous avez probablement raison sur le code exécuté avant les nœuds de venir à l'existence. Pouvez-vous me dire comment assurez-vous le retard qui se passe? va 'setTimeout travail ? Comment ça fonctionne dans le cas de mutationobserver ?

OriginalL'auteur geet mehar | 2016-11-03