就像问题标题一样,我正在使用WKWebView
,我想设置ViewController
的标题。有两种方法:
方法一:
self.title = webview.title
方法2:
- (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation {
[webView evaluateJavaScript:@"document.title"
completionHandler:^(id _Nullable ss, NSError * _Nullable error)
{
self.title = ss;
}];
}
他们是平等的吗?
答案 0 :(得分:1)
不,据我所知,在didFinishNavigation
网页内容已加载,但JS尚未解析并运行。因此,如果您在JS解析事件中对document.title
进行了更改,则此时您之前的self.title是陈旧且不正确的。
在evaluateJavascript
内触发didFinishNavigation
将请求排队,直到现有JS完成并运行。然后self.title
在完成块中正确应用。
如果有帮助我特意在基于React的webView中看到这种差异(可能还有其他影响,为什么正确的标题被推迟到didFinishNavigation
之后)。