如何在 WKWebView 完成加载之前 运行 函数?
How to run function before WKWebView finishes loading?
我正在创建一个 Swift iOS 项目,该项目有多个显示外部网站的 WKWebView。其中一些网站我没有管理权限,所以我使用一些代码来隐藏 div
class。这工作正常,但该元素在页面加载后隐藏,因此 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
函数中,但我假设因为它在视图加载之前运行,所以该元素不存在于视图中以将其删除。
查看WKUserScript
,配置为WKUserContentController
的一部分(在WKWebViewConfiguration
中定义)。这可能已经足够好了,但您可以通过实施内容拦截器来进一步推动它。请参阅 WKContentRuleStore
了解如何在您的应用程序内部进行这些设置,特别是 Safari Content-Blocking Rules Reference 了解有关语法的详细信息。
我正在创建一个 Swift iOS 项目,该项目有多个显示外部网站的 WKWebView。其中一些网站我没有管理权限,所以我使用一些代码来隐藏 div
class。这工作正常,但该元素在页面加载后隐藏,因此 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
函数中,但我假设因为它在视图加载之前运行,所以该元素不存在于视图中以将其删除。
查看WKUserScript
,配置为WKUserContentController
的一部分(在WKWebViewConfiguration
中定义)。这可能已经足够好了,但您可以通过实施内容拦截器来进一步推动它。请参阅 WKContentRuleStore
了解如何在您的应用程序内部进行这些设置,特别是 Safari Content-Blocking Rules Reference 了解有关语法的详细信息。