Как я могу определить, когда URL страницы усилителя изменился с WKWebview
Я разрабатываю простой веб-браузер с WKWebview. Я могу определить, когда URL изменился в SPA, как trello, с помощью пользовательского Javascript.
Этот способ не будет работать на странице усилителя. (Ускоренные мобильные страницы Google) Я попытался поставить print("webView.url")
для всех WKNavigationDelegate
функция Но я не мог обнаружить изменение amp page url
,
Но webView
Имеется URL страницы усилителя, я хотел бы сохранить URL страницы усилителя в локальном магазине.
1 ответ
Та же проблема. К сожалению, WKWebView запускает свои функции только при полной загрузке страницы.
Вместо этого мы должны использовать Key Value Observing в свойстве WebKit.url.
Выглядит примерно так:
import AVFoundation
import UIKit
import WebKit
import MediaPlayer
class ViewController: UIViewController, WKNavigationDelegate {
@IBOutlet weak var webView: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
webView.navigationDelegate = self
self.webView.addObserver(self, forKeyPath: "URL", options: .new, context: nil)
self.webView.addObserver(self, forKeyPath: "estimatedProgress", options: .new, context: nil)
self.webView.load(URLRequest(url: "https://google.com"))
}
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if keyPath == #keyPath(WKWebView.url) {
print("### URL:", self.webView.url!)
}
if keyPath == #keyPath(WKWebView.estimatedProgress) {
// When page load finishes. Should work on each page reload.
if (self.webView.estimatedProgress == 1) {
print("### EP:", self.webView.estimatedProgress)
}
}
}
Каждая дополнительная навигация в wkWebkitView должна вызывать отключение новой комбинации "### URL" и "### EP".