【问题标题】:Swift 5 - do something in app after some event inside embeded WKWebViewSwift 5 - 在嵌入 WKWebView 中的某些事件之后在应用程序中执行某些操作
【发布时间】:2022-06-10 18:50:05
【问题描述】:

我有 iOS (Swift 5) 应用程序,用户可以在其中单击注册按钮。此按钮从 WKWebView 中的站点打开注册页面(在弹出框内),用户应在此处完成现场注册,当他完成注册后,我需要有一种方法与我的应用程序交互(例如,在 OK 中显示注册并关闭弹出框的消息,返回应用程序登录屏幕)。当然,我可以访问网站代码,如果需要,我可以在这里修改一些内容。

我该怎么做?以及如何将网页中的一些数据(例如变量和值)发送回应用程序?

据我了解,我可以通过某种简单的方式控制在 WKWebView 中访问的页面 url,并且当用户在注册后到达“thankyou”页面时执行某些操作(但我不知道 Swift 5 代码如何执行此操作),但是对于其他一些页面,我需要将一些变量和值从网页(例如使用 JavaScript)发送回我的应用程序。这可能吗?如何在 Swift 5 中做到这一点?

【问题讨论】:

    标签: ios swift


    【解决方案1】:

    你可以使用Javascript接口:

    首先,启用 javascripts 并将 WKScriptMessageHandler 委托添加到您的 ViewController。

    if #available(iOS 14.0, *) {      
     webView.configuration.defaultWebpagePreferences.allowsContentJavaScript = true
    } else {
     webView.configuration.preferences.javaScriptEnabled = true
    }
    

    如果您想从网站中获取一些数据,请将 UserContentController 添加到您的 webView 配置中: webView.configuration.userContentController.add(self, name: "getData")

    如果您的应用收到 getData 消息,您可以处理它:

    extension ViewController: WKScriptMessageHandler {
        func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
            if message.name == "getData" {
               print(message.body) // <- Here you get the body if the message
               //Do something with the datas
            }
        }
    }
    

    在网站(JS)上,可以简单的调用 window.webkit.messageHandlers.getData.postMessage('anyString');

    如果你想用 Swift 在网站上执行 JS 代码,也很简单:

    func sendJS(param1: String) {
        let javascript = "callThisFunction('\(param1)')"
        webView.evaluateJavaScript(javascript, completionHandler: nil)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-30
      • 2011-09-26
      • 1970-01-01
      • 1970-01-01
      • 2013-03-17
      • 1970-01-01
      相关资源
      最近更新 更多