Функция выполняется только на медленном ПК - DOM загружается слишком рано? - PullRequest
0 голосов
/ 15 марта 2019

Я создаю расширение Chrome, которое использует обозреватель для наблюдения за изменениями в DOM.Если в DOM добавлен некоторый указатель ресурса, выполняется функция processLink():

      document.addEventListener("DOMContentLoaded", function(event) {


                chrome.storage.sync.get(["value", "enabled_value", "mode"], function(result) {



                // there's no HEAD yet at document-start, let's wait until we have it
                new MutationObserver((mutations, observer) => {
                  if (document.head) {
                    observer.disconnect();
                    monitorLinks();
                  }
                }).observe(document.documentElement, {childList: true});

                function monitorLinks() {
                  const onMutation = mutations => {
                    for (const {addedNodes} of mutations) {
                      for (const n of addedNodes) {
                        if (n.nodeName === 'LINK' && (n.rel === 'preconnect' || n.rel === 'prefetch' || n.rel ==='dns-prefetch' || n.rel === 'prerender')) {
                          processLink(n);
                        }
                      }
                    }
                  };
                  // the HEAD may have some children already
                  onMutation([{
                    addedNodes: document.getElementsByTagName('link'),
                  }]);
                  // watch for the newly added children of HEAD
                  new MutationObserver(onMutation).observe(document.head, {childList: true});
                }
    });
 });

Функция processLink() только передает сообщение в фоновый скрипт следующим образом:

function processLink(link) {

              prerenderFound = true;
              chrome.runtime.sendMessage({ "newIconPath" : "images/48.png" });
}

Результатом этого должно стать изменение иконки на панели расширений.Это все в contentScript(), которое выполняется на document_start.На моем компьютере, который имеет мало памяти и его процессор также работает медленно, расширение работает отлично.Однако на лучшем устройстве значок не изменится.Я думаю, что может быть проблема с загрузкой DOM слишком рано.Что может вызвать эту проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...