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 + ")")

Другие вопросы по тегам