Как запустить функцию до завершения загрузки WKWebView?

Я создаю проект Swift для iOS, который имеет несколько WKWebViews, которые отображают внешние веб-сайты. У некоторых из этих веб-сайтов нет административного доступа, поэтому я использую некоторый код, чтобы скрыть div учебный класс. Это работает нормально, но элемент скрыт ПОСЛЕ загрузки страницы, поэтому в течение нескольких секунд div элемент показывается пользователю. Увидеть ниже:

 func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
    print("finished")
    let elementID = "some_element"
    let removeElementIdScript = "var element = document.getElementById('\(elementID)'); element.parentElement.removeChild(element);"
    webView.evaluateJavaScript(removeElementIdScript) { (response, error) in
        debugPrint("removed")
    }
}

Есть ли способ реализовать этот код до загрузки представления? Или, если это невозможно, как я могу разместить маску или скрыть вид, пока он не загрузится. Я хочу не показывать div элемент любой ценой.

Я уже пытался вставить код в didStartProvisionalNavigation функция, но я предполагаю, потому что он выполняется до загрузки представления, элемент не присутствует в представлении для его удаления.

1 ответ

Решение

Смотреть на WKUserScript, настроенный как часть WKUserContentController (определяется в WKWebViewConfiguration). Вероятно, этого будет достаточно, но вы можете продвинуться дальше, внедрив блокировщик контента. Увидеть WKContentRuleStore для их внутренней настройки в вашем приложении, и в частности в Справочнике по правилам блокировки контента Safari для получения подробной информации о синтаксисе.

Другие вопросы по тегам