为每个 WKWebView 加载添加唯一的完成处理程序
Add unique completion handler to every WKWebView load
我有使用 WKWebView
加载多个网页的代码。有没有办法为每个 WKWebView.loadHTMLString
调用附加一个唯一的完成处理函数。
我注意到每个 returns WKNavigation?
,但我不想使用 WKNavigationDelegate
,因为这是所有加载事件。
例如,现在没有完成处理程序,我这样做:
wkWebView?.loadHTMLString("<p>Loading page #1</p>", baseURL: nil)
我想要一个像这样的独特的完成处理程序:
wkWebView?.loadHTMLString("<p>SLoading page #1</p>", baseURL: nil, completionHandler: {
print("Loaded page #1. Doing things only required for page #1.")
})
然后对于不同的负载,我可以更改完成处理程序:
wkWebView?.loadHTMLString("<p>SLoading page #2</p>", baseURL: nil, completionHandler: {
print("Loaded page #2")
})
正如您自己所说的那样,loadString
returns 一个 WKNavigation 对象 正是为了这个目的。因此,只需为自己创建一个字典,将 WKNavigation 对象与完成处理程序相关联,在调用时存储该处理程序:
var navs = [WKNavigation : () -> ()]()
func loadString(_ s:String, completionHandler:@escaping ()->()) {
if let nav = wkWebView?.loadHTMLString(s, baseURL:nil) {
self.navs[nav] = completionHandler
}
}
现在,作为 WKWebView 的 navigationDelegate
,当您听到页面已加载时,您将调用其相应的完成处理程序:
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
if let f = self.navs[navigation] {
f()
}
}
我有使用 WKWebView
加载多个网页的代码。有没有办法为每个 WKWebView.loadHTMLString
调用附加一个唯一的完成处理函数。
我注意到每个 returns WKNavigation?
,但我不想使用 WKNavigationDelegate
,因为这是所有加载事件。
例如,现在没有完成处理程序,我这样做:
wkWebView?.loadHTMLString("<p>Loading page #1</p>", baseURL: nil)
我想要一个像这样的独特的完成处理程序:
wkWebView?.loadHTMLString("<p>SLoading page #1</p>", baseURL: nil, completionHandler: {
print("Loaded page #1. Doing things only required for page #1.")
})
然后对于不同的负载,我可以更改完成处理程序:
wkWebView?.loadHTMLString("<p>SLoading page #2</p>", baseURL: nil, completionHandler: {
print("Loaded page #2")
})
正如您自己所说的那样,loadString
returns 一个 WKNavigation 对象 正是为了这个目的。因此,只需为自己创建一个字典,将 WKNavigation 对象与完成处理程序相关联,在调用时存储该处理程序:
var navs = [WKNavigation : () -> ()]()
func loadString(_ s:String, completionHandler:@escaping ()->()) {
if let nav = wkWebView?.loadHTMLString(s, baseURL:nil) {
self.navs[nav] = completionHandler
}
}
现在,作为 WKWebView 的 navigationDelegate
,当您听到页面已加载时,您将调用其相应的完成处理程序:
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
if let f = self.navs[navigation] {
f()
}
}