Ответ 1
-
Сделайте script запустите
document-start
, добавив этот код в script metablock:.............. // @run-at document-start .............. // ==/UserScript==
-
Теперь, когда script ничего не запускает в документе, поэтому мы присоединяем наблюдателя к корню документа и сканируем добавленные узлы для элемента контейнера
.audience-info
:var observer = new MutationObserver(function(mutations) { for (var i=0; i<mutations.length; i++) { var mutationAddedNodes = mutations[i].addedNodes; for (var j=0; j<mutationAddedNodes.length; j++) { var node = mutationAddedNodes[j]; if (node.classList && node.classList.contains("audience-info")) { node.firstElementChild.innerHTML = node.firstElementChild.innerHTML .replace(/[\d.]+/g, function(m) { return 2 * m }); // don't hog resources any more as we've just done what we wanted observer.disconnect(); return; } } } }); observer.observe(document, {childList: true, subtree: true});
При вызове наблюдателя всплывающие подсказки уже присутствуют в дереве документов, поэтому вы можете просто переместить код из функции "load" в наблюдателя до
return
, не изменяя ничего.
N.B. Лучше всего сделать наблюдателя как можно быстрее, в частности, используя простые for
-loops вместо обратных вызовов функций из-за накладных расходов, чтобы вызвать их, что может стать проблемой на медленном ПК/устройстве при открытии очень сложной страницы, генерирует тысячи (довольно общий случай) или сотни тысяч мутаций (крайне редко, но все же!). И отключите его, как только работа будет выполнена.
P.S. С помощью setMutationHandler код наблюдателя будет выглядеть следующим образом:
// @require https://greasyfork.org/scripts/12228/code/setMutationHandler.js
// ==/UserScript==
setMutationHandler(document, '.audience-info div:first-child', function(nodes) {
this.disconnect();
nodes.forEach(function(n) {
n.innerHTML = n.innerHTML.replace(/[\d.]+/g, function(m) { return 2*m });
});
});