Функция "возврата" WKWebView не выполняет обновление и код javascript.
У меня есть ViewController, встроенный в NavigationController, и этот ViewController добавляет WKWebView в качестве подпредставления.
Проблема в том, что после перехода на любую веб-страницу; если я вызываю функцию "вернуться", предыдущая страница будет присутствовать, и она не будет обновлена или перезагружена, а также заголовок панели навигации не будет обновлен.
Кроме того, мы обнаружили, что эта проблема возникает только в последней версии iOS 13.4.1 и не возникает в более ранних версиях. Я подозреваю, что это может быть проблема с кешем WKWebView и код JS не выполняется должным образом.
Кроме того, мы создали и инициализировали URLRequest с URL-адресом и применили указанные ниже политики кеширования, но безуспешно.
.useProtocolCachePolicy,.reloadIgnoringLocalCacheData,.reloadIgnoringLocalAndRemoteCacheData,.reloadIgnoringCacheData,.returnCacheDataElseLoad,.returnCacheDataDontLoad,.reloadRevalidatingCacheData
Мы пытались понять, что вызывает такое поведение, даже если мы создали новый проект, используя только простой WKWebView, и всегда сталкивались с одной и той же проблемой.
Вот код:
class ViewController: UIViewController {
var webView : WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
setupUI()
let configurations = WKWebViewConfiguration()
webView = WKWebView(frame: view.bounds, configuration: configurations)
webView.navigationDelegate = self
self.view.addSubview(webView)
let myURL = URL(string:"https://www.stackru.com")!
let request = URLRequest(url: myURL)
webView.load(request)
}
func setupUI() {
let forwardBarItem = UIBarButtonItem(title: "Forward", style: .plain, target: self,
action: #selector(forwardAction))
let backBarItem = UIBarButtonItem(title: "Backward", style: .plain, target: self,
action: #selector(backAction))
self.navigationItem.leftBarButtonItem = backBarItem
self.navigationItem.rightBarButtonItem = forwardBarItem
self.navigationController?.navigationBar.barTintColor = .systemBlue
self.navigationController?.navigationBar.tintColor = .white
}
@objc func forwardAction() {
if webView.canGoForward {
webView.goForward()
}
}
@objc func backAction() {
if webView.canGoBack {
webView.goBack()
}
}
}
extension ViewController: WKNavigationDelegate {
func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
}
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
print("decidePolicyFor: \(String(describing: webView.url?.absoluteString))")
decisionHandler(.allow)
}
func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) {
print("didFailProvisionalNavigation: \(String(describing: webView.url?.absoluteString))")
}
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
print("didFinish: \(String(describing: webView.url?.absoluteString))")
}
func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {
print("didFail: \(String(describing: webView.url?.absoluteString))")
}
}
Я использую Xcode 11.3.1, Swift 5 и iOS 13.4.1
Я что-то упускаю? Как это исправить? Любая помощь могла бы быть полезна.