/**
* функция добавляет код скрипта на страницу предварительно удаляя из него указанные куски текста,
* @param {string} url полные URL добавляемого скрипта
* @param {string} replaces массив со строками, которые будут удалены (заменены на пустоту)
*/
function addScript( url , replaces=[]) {
// получаем текст добавляемого на страницу скрипта
fetch(url)
.then(response=>{
return response.text();
})
.then(text=>{
// готовим регулярку для замены всех вхождени из массива replaces
const restr = "("+replaces.join("|")+")";
const regex = new RegExp(restr, "g");
// заменяем в тексте скрипта все вхождения из массива replaces
const code = text.replace(regex,"");
// получаем указатель на head страницы
let head = document.getElementsByTagName( 'head' )[ 0 ];
// создаем новый элемент script
let script = document.createElement( 'script' );
script.charset="utf-8";
script.type = 'text/javascript';
//script.src = url;
script.innerHTML = code;
// добавляем измененный скрипт на страницу
head.appendChild( script );
});
}
// Используем заготовку
// например у нас есть сторонний скрипт, который нам надо добавить на страницу => https://external.domain/js/needed.js
// но он запускаясь подгружает не нужные нам скрипты https://external.domain/js/unnecessary.js и https://external.domain/js/advertising.js
// тогда делаем так
addScript(
"https://external.domain/js/needed.js",
[
"unnecessary.js",
"advertising.js"
]
);
// ну и на последок. Вы должны понимать что данное решение не панацея и его легко обойти
// например "вредные" скрипты могут иметь случайносгенерированное имя
// так же хочу предупредить, что данное решение будет сыпать ошибки в консоль, так как после удаления
// из кода загружаемого скрипта строк с именами файлов вредных скриптов, код который их загружает
// не сможет этого сделать.
// так же данный свособ может привести к частичной или полной неработоспособности полезного скрипта
// например если полезный скрипт использует функции из подгружаемых вредных скриптов
// или если в полезном скрипте есть переменные или функции с именами, аналогичными удаляемым скриптам
// и т.д. и т.п.