Mutation Observer не работает на поддерживаемой версии Microsoft Edge - PullRequest
0 голосов
/ 10 марта 2020

У меня есть следующий код, который использует mutationobserver, и он работает в браузере chrome, firefox, работает, но не на границе браузера.

  var MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver;
  var observer = new MutationObserver(function(mutations) {

   mutations.forEach(function(mutation) {

     if (mutation.type === 'childList') {
     if(mutation.target.innerHTML == 'Online - Chat Us'){
       //if button text changes from "Offline" to "Online - Chat Us"
       if(mutation.removedNodes[0].nodeValue === 'Offline' && mutation.addedNodes[0].nodeValue === 'Online - Chat Us'){
         //change top button to "Online - Chat Us" && false the disabled attribute.
         document.getElementById('mySecondButton').innerHTML = mutation.addedNodes[0].nodeValue;
         document.getElementById('mySecondButton').disabled = false;
     }
 }
     }else if(mutation.type === 'characterData'){
     //console.log(mutation);      
     }
   });
 });

Только в браузере края в отладчик, я получаю следующую ошибку: SCRIPT5007: SCRIPT5007: невозможно получить свойство 'nodeValue' с неопределенной или нулевой ссылкой , которая ссылается на эту строку кода if(mutation.target.innerHTML === 'Chat Now'){

из этой диаграммы ниже видно, что я нахожусь на поддерживаемой версии.

Ссылка на ресурс диаграммы enter image description here

Снимок экрана краевой версии браузера.

enter image description here

1 Ответ

1 голос
/ 12 марта 2020

В Edge внутренние изменения HTML, innerText и textContent вызывают не одну, а две записи мутации: одну для удаления старого узла и одну для вставки нового узла. Все остальные браузеры имеют только одну запись мутации, которая содержит один удаленный и один вставленный узел. Я предоставил скрипту несколько нулевых проверок, чтобы сузить записи о мутациях только до одной, и было бы хорошо go.

...