WKWebView完成加载之前如何运行功能?

时间:2018-12-30 22:47:25

标签: swift wkwebview wkwebviewconfiguration

我正在创建一个Swift iOS项目,该项目具有多个显示外部网站的WKWebView。其中一些网站我没有管理权限,因此我使用一些代码来隐藏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 个答案:

答案 0 :(得分:1)

查看WKUserScript,它被配置为WKUserContentController(在WKWebViewConfiguration中定义)的一部分。那可能足够好了,但是您可以通过实现内容阻止程序来进一步推动它。请参阅WKContentRuleStore,以在应用程序内部进行设置,尤其是Safari Content-Blocking Rules Reference,以获取有关语法的详细信息。