Я делаю замену текста (из родов) с использованием метода, описанного here, в качестве основы для замены текста.Как подождать, пока страница завершит загрузку всего содержимого перед запуском скрипта или как лучше всего обнаружить основные изменения DOM.
Вот важная часть кода
var elements = document.getElementsByTagName('*');
for (var i = 0; i < elements.length; i++) {
var element = elements[i];
for (var j = 0; j < element.childNodes.length; j++) {
var node = element.childNodes[j];
if (node.nodeType === 3) {
var text = node.nodeValue;
var replacedText = text.replace(/[word or phrase to replace here]/gi, '[new word or phrase]');
if (replacedText !== text) {
element.replaceChild(document.createTextNode(replacedText), node);
}
}
}
}
Теперь это прекрасно работает в 99% случаях, но на некоторых компьютерах (я предполагаю, что в зависимости от скорости компьютера и что он кэшированный) этот код не будет работать на определенных сайтах, что наиболее важно при поиске в Google. Скрипт определенно работает, но он не находит ничего для замены. Мое лучшее предположение - загрузка и запуск скрипта до завершения загрузки и добавления всех данных из Google в DOM.
У меня есть два вопроса
1) Есть ли способ обнаружить, что Google закончил делать то, что ему нужно сделать перед запуском сценария? Или это неотъемлемо невозможно, потому что (я предполагаю) происходит какое-то асинхронное вещание.
2) Если я не могу обнаружить, что его полностью загруженная загрузка, то какой лучший способ обнаружить, что текст или элемент изображения был добавлен в DOM (или отредактирован на DOM), чтобы я мог перезапустить функция, которая заменяет текст?
Заранее благодарим за помощь.
нет простого способа, когда dom создается с использованием асинхронных данных. Вы можете использовать таймер интервала для проверки определенных элементов (элементов), а когда они существуют, запустите свой код – charlietfl
, где именно ваш асинхронный код? вы можете показать нам. обычно вы можете использовать обратные вызовы или обещания для обработки асинхронных вызовов функций. – marcel
@marcel OP создает расширение браузера, поэтому код находится на других страницах за пределами контроля OP. – charlietfl