[Решено] overclockers.ru

Alex302

Filters Developer
Staff member
Administrator
Не вернёт, потому что есть исключение.
 

vit9696

New Member
Какое исключение? Вы меня извините, но мне с вами сложно вести переписку, потому что вы по-видимому даже не пытались открыть сайт и воспроизвести проблему.

— Я вам указал на пропущенную рекламу, при открытии сайта overclockers.ru. А именно на macOS в Safari через 15 секунд вся страница заменяется на "выключите блокировщик";
— Вы мне не поверили, ок, я привёл код, который это делает и показал ошибку в ваших фильтрах, более того, написал за вас фильтр, который решает проблему;
— Вы меня не поняли, ок, я вам же объяснил, как работает JavaScript, и почему ваш фильтр работает криво.

Что мне ещё нужно сделать? Дать ссылку на вашу же документацию с описанием работы фильтров? Хорошо.
https://kb.adguard.com/ru/general/how-to-create-your-own-ad-filters#basic-rules-syntax

empty
Обычно заблокированный запрос выглядит для браузера как ошибка сервера. В случае применения модификатора empty, AdGuard эмулирует пустой ответ сервера со статусом 200 OK.

Примеры empty
  • ||example.org^$empty — возвращает пустой ответ для всех запросов к домену example.org и всех его поддоменов
У вас в русском фильтре присутствует код:
Code:
||overclockers.ru/static/js/app-pip.js
На сайте overclockers:
Code:
function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}
async function chkA() {
   var script = document.createElement('script');
   await sleep(15000);
   script.onerror = function(){
       script.onerror = null;
       document.body.removeChild(script);
       $("body").html("<div style=\"background-color: #fff; color: #333; width: 1000px; font-size: 18pt; margin: auto; position:relative; text-align: left; \"><img src=\"//www.overclockers.ru/images/hungry.png\" style=\"display:block; margin:auto\"><h1>Уважаемый посетитель!</h1><p>Мы определили, что вы используете систему удаления рекламы - Adblock, AdGuard или какую-то другую (в т.ч. правленный файл hosts).</p><p>Реклама - единственный источник дохода проекта Overclockers.ru, поэтому нам жизненно важно отображать рекламу на своих страницах.</p><p>Чтобы сайт жил и развивался, мы просим вас отключить блокировку рекламы.<p><br><br>- <a href=\"\">Хорошо, я отключил блокировку</a></p><!--br><p style=\"font-size:15pt\">- <a href=\"abp:subscribe?location=https://www.overclockers.ru/adblock.txt\">Добавить подписку для Adblock</a></p--><br><p style=\"font-size:15pt\">- <a href=\"https://forums.overclockers.ru/ucp.php?mode=login\">У меня есть подписка на конференцию без рекламы</a></p></div>");
   }
   script.src = "https://overclockers.ru/static/js/app-pip.js";
   document.body.appendChild(script);
}
$(function() {
   chkA();
});
Видите onerror? Это такая штука, которая вызывается при ошибке загрузки файла при таймауте (i.e. когда код ответа не 200 и не остальные успешные). См. https://www.w3schools.com/jsref/event_onerror.asp
 

Alex302

Filters Developer
Staff member
Administrator
"выключите блокировщик" - это не реклама.
Code:
$("body").html("<div style...
Эта часть скрипта вырезается, и заглушка не появляется
 

vit9696

New Member
На macOS этого не происходит, и заглушка появляется. Значит это platform-specific баг.
Как я понимаю, речь об этом:
Code:
/overclockers\.ru\/.+\/(?!getPipPlace\?)|forums\.overclockers\.ru\/.+|overclockers\.ru\/?/$/$replace=/\\$\("body"\).html\(.+?("\);)//,~script,~stylesheet,important
 

vit9696

New Member
Выше отмечал, что 1.5.8, если интересует билд, то 455. Собственно последняя из доступных.
 

Alex302

Filters Developer
Staff member
Administrator
Проверьте такое правило
Code:
overclockers.ru#%#AG_onLoad(function() { window.chkA = function() {}; });
А покажите код страницы(желательно только начало, которое на экран помещается)
 

Alex302

Filters Developer
Staff member
Administrator
А если выключить
Code:
/overclockers\.ru\/.+\/(?!getPipPlace\?)|forums\.overclockers\.ru\/.+|overclockers\.ru\/?/$/$replace=/\\$\("body"\).html\(.+?("\);)//,~script,~stylesheet,important
и добавить
Code:
/overclockers\.ru\/.+\/(?!getPipPlace\?)|forums\.overclockers\.ru\/.+|overclockers\.ru\/?/$/$replace=/(function chkA\(\) \{)/\$1 return;/,~script,~stylesheet,important
Происходит замена в коде страницы?
 

vit9696

New Member
Замена происходит и отрабатывает корректно. В отладчике изменяется, предложение добавления сайта в исключения не появляется.
 
Last edited:

Alex302

Filters Developer
Staff member
Administrator
А такое работает?
Code:
/overclockers\.ru\/.+\/(?!getPipPlace\?)|forums\.overclockers\.ru\/.+|overclockers\.ru\/?/$/$replace=/\("body"\).html\(.+?("\);)//,~script,~stylesheet,important
Тоже нужно отключить остальные правила $replace для этого сайта(сейчас только одно может применяться)
Code:
\\$
возможно в этой части проблема.
 

vit9696

New Member
НЕ работает. Такое тоже не работает:
Code:
/overclockers\.ru\/.+\/(?!getPipPlace\?)|forums\.overclockers\.ru\/.+|overclockers\.ru\/?/$/$replace=/\("body"\)\.html\(.+?"\);//,~script,~stylesheet,important
Code:
/overclockers\.ru\/.+\/(?!getPipPlace\?)|forums\.overclockers\.ru\/.+|overclockers\.ru\/?/$/$replace=/\("body"\)\.html\(.+"\);//,~script,~stylesheet,important
ИМХО, там в длине capture проблема, скорее всего. Всё это действо 900+ символов, и видимо в библиотеке регулярок, которую вы используете в macOS, прописан лимит ниже, чем на других платформах.
 

Alex302

Filters Developer
Staff member
Administrator
Но у меня же работает, и гораздо более длинные куски вырезаются.
 

Alex302

Filters Developer
Staff member
Administrator
Спрошу у разработчиков, в чём может быть проблема.
 

Alex302

Filters Developer
Staff member
Administrator
У нас ни у кого не повторяется.
Попробуйте такие по одному, с выключенными фильтрами(т.к. только одно правило такого типа может работать)
Интересует только - сработало/не сработало, чтоб проблемную часть вычислить(если хоть что-то вырезало - значит сработало)
Смотреть нужно только исходный текст
Code:
/overclockers\.ru\/.+\/(?!getPipPlace\?)|forums\.overclockers\.ru\/.+|overclockers\.ru\/?/$/$replace=/\\$\("body"\).html\(.+?("\);)//,~script,~stylesheet,important
Code:
/overclockers\.ru\/.+\/(?!getPipPlace\?)|forums\.overclockers\.ru\/.+|overclockers\.ru\/?/$/$replace=/\\$\("body"\).html\(.+?//,~script,~stylesheet,important
Code:
/overclockers\.ru\/.+\/(?!getPipPlace\?)|forums\.overclockers\.ru\/.+|overclockers\.ru\/?/$/$replace=/\\$\("body"\).html//,~script,~stylesheet,important
Code:
/overclockers\.ru\/.+\/(?!getPipPlace\?)|forums\.overclockers\.ru\/.+|overclockers\.ru\/?/$/$replace=/\\$\("body"\).html\(.*?(\);)//,~script,~stylesheet,important
 

vit9696

New Member
Гм, а на macOS это проверялось вообще (у меня 10.13.5 релизная, браузер Safari, но тестил в Firefox, разницы нет)? Результаты прилагаю. Все остальные фильтры (вообще все) были выключены, при каждом тесте рестартовал браузер (в приватном режиме) и сам AdGuard, потому ошибки, гм, исключены. Фейлы перепроверил по два раза.

Code:
/overclockers\.ru\/.+\/(?!getPipPlace\?)|forums\.overclockers\.ru\/.+|overclockers\.ru\/?/$/$replace=/\\$\("body"\).html\(.+?("\);)//,~script,~stylesheet,important
FAIL, результат:
Code:
    script.onerror = function(){
        script.onerror = null;
        document.body.removeChild(script);
        $("body").html("<div style=\"background-color: #fff;...
Code:
/overclockers\.ru\/.+\/(?!getPipPlace\?)|forums\.overclockers\.ru\/.+|overclockers\.ru\/?/$/$replace=/\\$\("body"\).html\(.+?//,~script,~stylesheet,important
OK, результат:
Code:
    script.onerror = function(){
        script.onerror = null;
        document.body.removeChild(script);
        <div style=\"background-color: #fff;...
Code:
/overclockers\.ru\/.+\/(?!getPipPlace\?)|forums\.overclockers\.ru\/.+|overclockers\.ru\/?/$/$replace=/\\$\("body"\).html//,~script,~stylesheet,important
ОК, результат:
Code:
    script.onerror = function(){
        script.onerror = null;
        document.body.removeChild(script);
        ("<div style=\"background-color: #fff;...
Code:
/overclockers\.ru\/.+\/(?!getPipPlace\?)|forums\.overclockers\.ru\/.+|overclockers\.ru\/?/$/$replace=/\\$\("body"\).html\(.*?(\);)//,~script,~stylesheet,important
FAIL, результат:
Code:
    script.onerror = function(){
        script.onerror = null;
        document.body.removeChild(script);
        $("body").html("<div style=\"background-color: #fff;...
 

Alex302

Filters Developer
Staff member
Administrator
Добавьте в пользовательский фильтр:
Code:
overclockers.ru#%#AG_onLoad(function() { window.chkA = function() {}; });
Опера не разрешает загружать правила JS.
 
Top