【问题标题】:How to run function before WKWebView finishes loading?如何在 WKWebView 完成加载之前运行函数?
【发布时间】:2018-12-30 22:47:25
【问题描述】:

我正在创建一个 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 函数中,但我假设因为它在视图加载之前运行,所以视图中不存在元素以将其删除。

【问题讨论】:

    标签: swift wkwebview wkwebviewconfiguration


    【解决方案1】:

    查看WKUserScript,配置为WKUserContentController 的一部分(在WKWebViewConfiguration 中定义)。这可能已经足够好了,但是您可以通过实施内容拦截器来进一步推动它。请参阅 WKContentRuleStore 以在您的应用程序内部设置这些内容,特别是 Safari Content-Blocking Rules Reference 以了解有关语法的详细信息。

    【讨论】:

    • 如果我想一次删除多个div 元素怎么办?
    • 我不确定为什么会有所不同?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    • 1970-01-01
    • 2021-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多