Ответ 1
На данный момент одной общей темой среди всех обновлений статуса (и комментариев) является то, что их тексты находятся в одном или наборе элементов span
с атрибутом data-text
, установленным на true
. Поэтому дайте им возможность:
document.querySelectorAll("span[data-text='true']");
Для меня я ввел в поле состояния 3 строки и поле комментариев 1 строки фиктивного текста. Поэтому, когда я выполняю вышеуказанный код в консоли, он возвращает массив из четырех объединенных строк:
>>> (4) [span, span, span, span]
С этим массивом я могу использовать метод Array.prototype.forEach()
для итерации через промежутки и замены innerText
:
document.querySelectorAll("span[data-text='true']").forEach(function(element) {
element.innerText = element.innerText.replace('Lorem ipsum','Hello world');
});
Однако важно отметить, что эти изменения сделаны в самом HTML, а Facebook не сохраняет все свои данные непосредственно в HTML. Поэтому он может вызвать нежелательные события, когда вы вводите текст в поле, не фокусируете, меняете текст в поле и переориентируете это поле. Когда вы переориентируете, я считаю, что он захватывает данные того, что было в тексте, прежде чем вы сфокусировали это поле, от внешнего источника, такого как React Virtual DOM. Чтобы не допустить этого, изменения должны быть сделаны после нажатия поля (реального или симулирующего) или при вводе пользователем с использованием своего рода MutationObserver
(ЦСИ).