WKWebView: вызов JavaScript после загрузки страницы
Я делаю следующее:
- загрузить WKWebView, давайте назовем это представление A
- попросить пользователя ввести некоторые детали
- попросить пользователя нажать кнопку
- перехватить щелчок на WKWebView и нажать новое представление приложения, давайте назовем это представление B
- позволить пользователю вычислить результат в новом представлении, а затем перейти назад к ранее загруженному WKWebView
Теперь: я хотел бы добавить информацию, которую я вычислил, к ранее загруженной веб-странице (вид A). Единственный способ, которым я знаю, как это сделать, это загрузить javascript в метод loadView(). Однако этот метод не вызывается при переходе назад от представления B к представлению A, поскольку представление A уже было загружено. Также принудительная перезагрузка при повторном появлении представления A приведет к потере значений в полях, которые были отредактированы пользователями.
Это "стандартный" код, который я должен назвать сценарием:
override func loadView() {
super.loadView()
var contentController = WKUserContentController();
var userScript = WKUserScript(
source: "setValue(5)",
injectionTime: WKUserScriptInjectionTime.AtDocumentEnd,
forMainFrameOnly: true
)
contentController.addUserScript(userScript)
var config = WKWebViewConfiguration()
config.userContentController = contentController
self.webView = WKWebView(frame: self.containerView!.bounds, configuration: config)
}
Поэтому теперь мне нужна ваша помощь, чтобы понять, как вызвать метод "setValue(customparameter)" с пользовательским значением (вычисляемым в представлении B) не в loadView, а когда представление снова появляется.
Я могу сохранить значение в одноэлементном объекте, так что все в порядке. Однако я не знаю, как вызвать / внедрить JavaScript на этом этапе. Любая помощь?
2 ответа
Используйте WKWebViewConfiguration removeAllUserScripts, а затем снова добавьте все измененные сценарии (включая не измененные). Не забудьте использовать общий или одноэлементный экземпляр WKWebViewConfiguration.
Это решит любое обновление или новый wkwebview, созданный, чтобы иметь последние
Как насчет:
self.webView?.evaluateJavaScript("setValue(" + customparameter + ")")