У меня есть расширение Chrome, и я хочу подождать, пока элемент будет загружен, прежде чем вводить содержимое на страницу.Расширение Chrome: ожидание загрузки элемента (async js)
Я пытаюсь придать кнопку:
myButton = document.createElement('button');
myButton.class = 'mybutton';
document.querySelector('.element_id').appendChild(myButton)
У меня есть это в верхней части моего скрипта содержания. Он работал нормально, но потом он переставал работать. Ошибка, которая была показана была:
Uncaught TypeError: Cannot read property 'appendChild' of null
Для того, чтобы ждать, пока элемент с идентификатором класса .element_id
для загрузки, я попытался использовать MutationObserver
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
if (!mutation.addedNodes) return
for (var i = 0; i < mutation.addedNodes.length; i++) {
if (mutation.addedNodes[i].parentNode == document.querySelector('#outer-container')) {
myButton = document.createElement('button');
myButton.class = 'mybutton';
document.querySelector('.element_id').appendChild(myButton)
}
var node = mutation.addedNodes[i]
}
})
})
observer.observe(document.body, {
childList: true
, subtree: true
, attributes: false
, characterData: false
})
Когда я мутацию наблюдатель, на странице будет загружен внешний элемент div, называемый outer-container
, и мне не удалось напрямую сравнить класс .element_id
. Класс .element_id
содержит множество слоев во внешнем div.
ОДНАКО, вышеуказанное не помогло, и я все еще получил ошибку свойства null.
Есть ли лучший способ подождать, когда какой-либо элемент будет загружен (который загружается async), перед инъекцией?
Извините, но я забыл указать свойства. У меня был 'childList', но он все еще терпит неудачу :( – confused
@confused, не могли бы вы попробовать мой код? Я проверял и считаю, что он должен работать. –
@HaibaraAi См. Мой ответ – Xan