我正在创建一个 Chrome 扩展程序并尝试在 gMail 撰写框的发送按钮旁边包含一个小文本。
我正在使用 MutationObserver 来了解撰写框窗口何时出现。我通过观察带有 class 的元素来做到这一点,no因为 compose box 元素是作为该元素 (class no) 的子元素创建的。
当用户单击撰写按钮并出现撰写框窗口时,我会使用该.after()方法在 SEND 按钮旁边放置一个元素。SEND 按钮类名称是.gU.Up.
这些是 gMail 的真实类名,也很奇怪。
下面是我正在使用的代码:
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);
问题是我不断收到以下错误:
Uncaught TypeError: Failed to execute 'observe' on 'MutationObserver': parameter 1 is not of type 'Node'
任何人都可以帮忙吗?我已经尝试了很多东西,也在这里查看了其他答案,但仍然无法摆脱这个错误。
这是我的manifest.json文件:
{
    "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" 
    ]
}
PS 我已经尝试过插入查询库,但它有一些缺点。它不允许我具体说明特定元素的变化。我还没有尝试过 mutationsummary 库,但由于它使用了 MutationObserver,我认为这个问题会持续存在。
从评论中添加:
确实选择器没有给我一个节点。我检查了控制台,它给出了一个对象。我还检查了控制台,它正在选择我想要观察的适当元素。
但是,当我console.log为所选元素添加时,它显示为未定义。这意味着,在节点出现之前执行代码可能是正确的。你能告诉我如何确保延迟发生吗?“setTimeout”会起作用吗?在 MutationObserver 的情况下它是如何工作的?