2

我正在执行以下操作:

  • 加载一个 WKWebView,让我们调用这个视图 A
  • 要求用户输入一些详细信息
  • 要求用户点击一个按钮
  • 拦截对 WKWebView 的点击并在应用程序上推送一个新视图,让我们调用这个视图 B
  • 允许用户在新视图中计算结果,然后返回到之前加载的 WKWebView

现在:我想将计算出的信息添加到之前加载的网页(视图 A)中。我知道如何做到这一点的唯一方法是在 loadView() 方法上加载 javascript。但是,当您从视图 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)
  }  

因此,现在我需要您的帮助来了解如何使用自定义值(在视图 B中计算)而不是在 loadView 中而是在视图重新出现时调用方法“setValue(customparameter)”。

我可以将值存储在单例对象中,这样就可以了。但是我不知道在这个阶段如何调用/注入 javascript。有什么帮助吗?

4

2 回答 2

1

使用 WKWebViewConfiguration removeAllUserScripts 然后再次添加所有更改的脚本(包括未更改的)。请记住使用共享或单例 WKWebViewConfiguration 实例。

这将解决任何刷新或新创建的 wkwebview 以拥有最近的

于 2015-08-25T10:03:37.997 回答
1

怎么样:

self.webView?.evaluateJavaScript("setValue(" + customparameter + ")")

于 2016-08-30T04:49:38.637 回答