美文网首页
关于使用WKWebView 加载网页,并进行JS交互的问题。

关于使用WKWebView 加载网页,并进行JS交互的问题。

作者: JonnyCooper | 来源:发表于2017-07-19 17:57 被阅读409次

    近期由于项目需求,在用UIWebView 加载网页的时候,发现网页上面有莫名的异常,然后用WKWebView加载没有上述问题,想到可能是UIWebView 的问题,而是果断换了,现在分享一些经验。

    ㈠、后台对于iOS端做的很简单,就是只需要一段代码就可以如下:

    window.webkit.messageHandlers.input.postMessage(null);

    input:为注入JS的对象,这个名称可以前端定义,也可以iOS移动端定义;

    唯一需要前端多做点的就是需要做一下平台判断。

    iOS平台需要:

    import WebKit

    /// 配置网页视图:

    let webConfiguration = WKWebViewConfiguration()

    WKWebViewConfiguration,可以配置网页显示的属性,不过一般不做操作,除非有特殊要求;

    /**

    * WKUserContentController 用于给JS注入对象,注入对象后,JS端就可以使用

    */

    // 通过JS与webview内容交互

    let userContentController = WKUserContentController()

    userContentController.add(self, name: "input")

    //

    webConfiguration.userContentController = userContentController

    extension WebViewViewController: WKScriptMessageHandler {

    func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {

    VCUtils.dPrint("message.body:\(message.body)")

    var bodyDict: Dictionary = [String: Any]()

    if message.name == "input" {

    self.input()

    }

    }

    private func input() {

    // "show('\(accountManager.account.getMobileNo())', '\(accountManager.account.userInfo.customerName)', '\(accountManager.account.userInfo.idNo)')"该字符串为iOS传递给JS的数据 ,show 为JS端接收方法名称

    self.webView.evaluateJavaScript("show('\(accountManager.account.getMobileNo())', '\(accountManager.account.userInfo.customerName)', '\(accountManager.account.userInfo.idNo)')") { (result, error) in

    print("input result::\(String(describing: result))")

    }

    写完瞬间感觉完爆UIWebView有木有,比它简单多了。

    此例已经在我的项目代码中亲测有效,并且已经上线使用,所以大家可以放心使用,不过此处我只提供一些WKWebView与 JS交互的方式和前端需要做的事情,并未阐述WKWebView 内部API,需要了解的可以点击下面的链接。最后初始化之后一定要实现其协议,否则协议下面的方法无法调用。

    WKWebView

    相关文章

      网友评论

          本文标题:关于使用WKWebView 加载网页,并进行JS交互的问题。

          本文链接:https://www.haomeiwen.com/subject/getrkxtx.html