MutationObserver продолжает перебирать каждый элемент и создавать повторяющиеся кнопки в сценарии TamperMonkey. - PullRequest
0 голосов
/ 06 августа 2020

Я работаю над сценарием для использования с Tampermonkey, и он почти закончен, но я продолжаю сталкиваться с проблемой, когда mutationobserver перебирает каждый указанный элемент на странице. На странице будет различное количество элементов «input-money-group», и каждый раз, когда скрипт загружается, мне нужно добавлять кнопки на страницу, когда он видит, что это поле ввода загружено.

Однако вместо добавления кнопки один раз, он добавляет кнопки для каждой итерации поиска этого поля, поэтому мне нужно ограничить его запуском этой внутренней функции только один раз. Вот код.

const isAddPage = window.location.hash === '#/p=add' || window.location.hash === '#/add',
        {
            loader,
            popup,
            buttons,
            getCurrentTab
        } = pricer;

const observer = new MutationObserver((mutations) => {
        for (const mutation of mutations) {
            for (const node of mutation.addedNodes) {
                if (node.classList && node.classList.contains('input-money-group')) {

                    console.log('its working');
                    // Create all elements & update tab.
                    if (isAddPage) {
                        setTimeout(function() {
                            getCurrentTab();
                            loader.build();
                            popup.build();
                            buttons.build();
                            observer.disconnect();
                        }, 250);
                      }

                }
            }
        }
    })

    const wrapper = document.querySelector('#bazaarroot')
    observer.observe(wrapper, {
        subtree: true,
        childList: true })

Я уже пробовал использовать Observer.disconnect (); в var ios местах, и это не мешает ему создавать лишние кнопки.

...