Блокировщик рекламы UWP WebView

Я делаю приложения UWP и использую WebView для отображения содержимого веб-страницы. Контент не мой, поэтому я хотел бы заблокировать надоедливую видеорекламу. Я использую функцию ниже, чтобы поместить css, который скрывает баннеры. Как подойти к этой задаче? Должен ли я фильтровать каждый HTTP-запрос, и если он соответствует некоторому регулярному выражению, чтобы остановить запрос? Или я должен заблокировать внешние javascripts, которые запускают рекламу? Есть темы об этом для Android WebView, но я не смог заставить его работать на UWP.

private async void InvokeScript()
{
    string functionString = "let link = document.createElement('link'); link.rel = 
    'stylesheet'; link.type = 'text/css'; link.href = 'ms-appx-web:///MyCss.css'; 

    document.getElementsByTagName('head')[0].appendChild(link);";

    await webView.InvokeScriptAsync("eval", new string[] { functionString 
    });
}

person Plamen Metodiev    schedule 10.05.2018    source источник


Ответы (2)


Я нашел отличное решение на форуме Microsoft. Для UWP WebView FrameNavigationStarting делает свою работу!

webView.FrameNavigationStarting += webView_FrameNavigationStarting;

private void webView_FrameNavigationStarting(object sender, WebViewNavigationStartingEventArgs args)
{
    // Cancel navigation if URL is not allowed. (Implemetation of IsAllowedUri not shown.)
    if (!IsAllowedUri(args.Uri))
        args.Cancel = true;
}
person Plamen Metodiev    schedule 21.05.2018

Объявления на разных сайтах могут быть разными, общего сценария удаления всех объявлений нет.

Чтобы удалить рекламу на веб-сайте, вам нужно получить содержимое веб-сайта и найти код рекламы, затем вы можете ввести код js, чтобы скрыть рекламу.

person Breeze Liu - MSFT    schedule 11.05.2018
comment
Это хорошее решение. Я нашел способ скрыть баннеры. Как скрыть видеорекламу от Google? Они выполняются из скриптов. Как их заблокировать? - person Plamen Metodiev; 11.05.2018
comment
Во-первых, вы должны найти контейнер видеорекламы, если это iframe или div, вы сможете их скрыть. - person Breeze Liu - MSFT; 14.05.2018
comment
Я хочу смоделировать блокировщик рекламы. AdBlockers имеют список доменов и каким-то образом блокируют HTTP-запросы от них. Может ли JavaScript сделать это? - person Plamen Metodiev; 17.05.2018
comment
Может ли javascript сделать это? Ответ — нет, AdBlockers — это подключаемый модуль, использующий API браузера, но WebView не имеет много функций в качестве браузера. - person Breeze Liu - MSFT; 18.05.2018
comment
Есть ли другой вариант? Видеообъявления запускают события при завершении, отмене и т. д. Когда я останавливаю все запросы с помощью прототипа или скрываю iframe, страница перестает работать. - person Plamen Metodiev; 19.05.2018
comment
Javascript не может блокировать http-запросы других js-скриптов. И в настоящее время webview не предлагает возможность блокировать js-скрипты, поэтому других вариантов нет. - person Breeze Liu - MSFT; 21.05.2018