【发布时间】:2020-04-24 10:34:40
【问题描述】:
我正在开发一个主要由 WKWebView 组成的应用程序。 我使用 WKNavigationDelegate 协议监控它的导航状态。
我将 viewController 创建为 WKNavigationDelegate
class ViewController: UIViewController, WKUIDelegate, WKNavigationDelegate, UIGestureRecognizerDelegate {
...
override func viewDidLoad() {
...
webView.navigationDelegate = self
...
我像这样在 webview 上加载请求:
let gotoUrl = ... as? String
if let url = URL(string: gotoUrl) {
let request = URLRequest(url: url)
webView.load(request)
}
然后是委托方法:
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
print("Successfully loaded")
}
func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) {
print("Did commit navigation")
}
func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
print("Start Provisional navigation")
}
func webViewWebContentProcessDidTerminate(_ webView:WKWebView) {
print("request failed")
}
func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {
print("request failed")
}
func webView(_ webView: WKWebView, didFailProvisionalNavigation: WKNavigation!, withError: Error) {
print("request failed")
}
这适用于我的 webapps 初始网址:https://example.com/app/ 然后调用委托方法。
当应用程序从通知中打开时,我想将 web 视图定向到 web 应用程序的特定部分。 但是,当我加载加载 webapp 特定部分的 url 时: https://example.com/app/#/secure/content/alarm-base/alarm-list//alarm-detail/1381122 尽管 webview 成功加载了 url,但未调用委托方法。 如果我在启动时直接加载特定的 url,也会调用委托方法。 Web 应用程序是用 AngularJS 编写的。
我希望委托处理程序为我从代码加载的每个请求触发。 关于如何实现这一目标的任何想法?
【问题讨论】:
-
看来您可以通过添加 ``` webView.load(request) webView.stopLoading() webView.reload() ``` 来强制执行此操作,这很笨重,有点用