'наблюдаем' в 'MutationObserver': параметр 1 не относится к типу 'Node'
Я создаю расширение для Chrome и пытаюсь добавить небольшой текст рядом с кнопкой «ОТПРАВИТЬ» в окне создания письма gMail.
Я использую MutationObserver, чтобы знать, когда появляется окно создания блока. Я делаю это, наблюдая за элементом с классомno
поскольку элемент compose box создается как дочерний элемент этого элемента (классno
).
Когда пользователь нажимает кнопку «Создать» и появляется окно «Создать», я помещаю элемент рядом с кнопкой «Отправить», используя.after()
метод. Имя класса кнопки ОТПРАВИТЬ.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"
]
}
Постскриптум Я уже пробовал вставку библиотеки запросов, но у нее есть несколько недостатков. Это не позволяет мне быть конкретным относительно изменений в конкретном элементе. Мне еще предстоит попробовать библиотеку mutationsummary, но, поскольку она использует MutationObserver, я решил, что проблема не исчезнет.
Добавлено из комментария:
Это правда, что селектор не дает мне узел. Я проверил в консоли, он дает объект. Я также проверил в консоли, и он выбирает соответствующий элемент, который я хочу наблюдать.
Тем не менее, когда я добавляюconsole.log
для выбранного элемента он отображается как неопределенный. Это означает, что вы, вероятно, правы в отношении выполнения кода до появления узлов. Можете ли вы сказать мне, как сделать так, чтобы задержка произошла? будет работать setTimeout? Как это работает в случае MutationObserver?