Доброго времени! Прошу помощи.
Есть сайт, на нем есть скрипт и функция, которая срабатывает при загрузке страницы.
Функция делает следующее, получает строку и перебирает по символам, если символ, тот, что задан в условии, то заменяет на другой и после выводит в результат на страницу.
Принцип следующий: если определенный символ кирилицы [а, е, р, с, В, Т, о ...], Заменить на соответствующий из латиницы (визуально похожий).
Так вот. Как можно остановить выполнение этой функции, или заморозить, или перехватить, или проследить где и что поменялось и выполнить обратное действие.
Заранее огромное всем спасибо!!! \(^o^)/
Zickname, просто прочитайте информацию о теге, подумайте относится ли оно к вашему вопросу. Ну, или можно просто забить и надеяться, что модератор не грохнет вопрос за нарушение пункта 3.1 правил.
Александр, тогда надо ещё добавить тег "компьютеры", оно же на компьютере работает, и тег "сети", сайт же в интернете, а также тег "физика", без физики ни сети, ни компьютеры не работает. В общем, я долго могу продолжать )
Поставить расширение для браузера с поддержкой пользовательских скриптов, например tempermonkey и написать свой скрипт который по document-start начнёт отслеживать появление этой функции\запрос к серверу\ещё что-то в зависимости от кода, и подменит результат.
Вариантов что именно нужно сделать - такое же бесконечное множество, как и вариантов написания этой вашей функции. Тут надо смотреть на конкретный код.
function g(str) {
let u = str.charCodeAt(0) || void 0;
function s(min, max, type) {
let output = '', int = ran(min, max);
for (var i = 0; i < int; i++) {
if ((i % 4) === 0 && i !== 0) {
output += (type === 0 ? '-' : ' ');
}
output += `&#${ran(46, 122)};`;
}
return output;
};
function r(min, max) {
let o = '', int = ran(min, max);
if (int === 0) {
return o;
} else {
for (var i = 0; i < int; i++) {
o += `<span id="&#${os};${s(20, 30, 0)}&#${ts - 1};">&#${ran(1039, 1104)}</span>`;
}
return o;
}
};
if (u !== void 0) {
if (u === 1042) str = 'B';
if (u === 1045) str = 'E';
if (u === 1052) str = 'M';
if (u === 1054) str = 'O';
if (u === 1056) str = 'P';
if (u === 1058) str = 'T';
if (u === 1072) str = 'a';
if (u === 1077) str = 'e';
if (u === 1086) str = 'o';
if (u === 1088) str = 'p';
if (u === 1089) str = 'c';
if (u === 1091) str = 'y';
}
return `${r(0, 1)}<span id="&#${os};${s(20, 30, 1)}&#${ts - 1};">${str}</span>`;
}
//st(os, ts);
document.querySelectorAll(`#content .container div[id^="q_"] .card-header`).forEach(function (el) {
let str = el.innerHTML, out = "";
for (var i = 0; i < str.length; i++) {
out += g(str[i]);
}
return el.innerHTML = out;
});
Zickname, важна не сама функция, а где она задаётся, чтоб её подменить можно было. Хорошо если в глобале, а вот если где-то ещё - там пляски с бубном начнутся.
Zickname, ну например можно вот так вот вклиниться сюда, подменив заранее стандартный forEach:
NodeList.prototype.forEach = ((forEach) => {
return function(func, ...args) {
// если переданная функция та что надо
if(String(func).includes('out += g(str[i]);')) {
// если вызов происходит только один раз, то можно
// отменить наш патч, чтоб не замедлять работу
// NodeList.prototype.forEach = forEach;
// делаем что-то другое, или не делаем ничего
return;
};
// иначе выполняем forEach как обычно
return forEach.call(this, func, ...args);
}
})(NodeList.prototype.forEach);
Aetae, Огромное тебе спасибо!!! За отзывчивость и потраченное время на мой вопрос и проблему!!!
Сначала не получилось с tampermonkey, после установки run-at: document-start, всё получилось!)
Zickname, в смысле при перегрузке и в смысле не срабатывает?
Может меняется адрес и скрипт вообще не подключается?
Тогда посмотри чтоб @match у тебя содержал * на меняющихся местах.
Может меняется сам скрипт на странице и наша врезка уже не работает?
Проверь.
Может страница обновляется через ajax без реальной перезагрузки?
Тогда:
1. закомментируй обратно, если раскомментировал: // NodeList.prototype.forEach = forEach;;
2. посмотри может функция вызывается другим образом откуда-то из другого места при такой загрузке.
Aetae, мне неудобно перед Вами((
За отнятое время и в тот же момент, огромное спасибо!!!
Я учусь и благодаря Вам, ловлю вашу логику! Поверю на работе Ваш пример, и кажется я неправильно его там написал.
Спасибо!