iOS Swift5.0 WKWebView使用JS与Swift交互

1.创建wkwebview

import WebKit

lazy var webView: WKWebView = {
    let preferences = WKPreferences()
    preferences.javaScriptEnabled = true

    let configuration = WKWebViewConfiguration()
    configuration.preferences = preferences
    configuration.userContentController = WKUserContentController()
    // 给webview与swift交互起一个名字:AppModel,webview给swift发消息的时候会用到
    configuration.userContentController.add(self, name: "AppModel")

    var webView = WKWebView(frame: self.view.frame, configuration: configuration)
    // 让webview翻动有回弹效果
    webView.scrollView.bounces = true
    // 只允许webview上下滚动
    webView.scrollView.alwaysBounceVertical = true
    webView.navigationDelegate = self
    return webView
}()

2.ViewController实现两个协议
两个协议分别是:WKNavigationDelegate WKScriptMessageHandler

WKNavigationDelegate:判断页面加载完成,只有在页面加载完成了,才能在swift中调webview中的js方法
WKScriptMessageHandler: 在webview中给swift发消息时要用到协议中的一个方法来接收
3.Swift调用WebView中的JS方法

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
    webView.evaluateJavaScript("sayHello('WebView你好!')") { (result, err) in
        print(result, err)
    }
}

4.拦截WebView中给Swift发消息

func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
    print(message.body)
}

###详细代码

import UIKit
import WebKit

class ViewController: UIViewController, WKNavigationDelegate, WKScriptMessageHandler {

    lazy var webView: WKWebView = {
        let preferences = WKPreferences()
        preferences.javaScriptEnabled = true

        let configuration = WKWebViewConfiguration()
        configuration.preferences = preferences
        configuration.userContentController = WKUserContentController()
        configuration.userContentController.add(self, name: "AppModel")

        var webView = WKWebView(frame: self.view.frame, configuration: configuration)
        webView.scrollView.bounces = true
        webView.scrollView.alwaysBounceVertical = true
        webView.navigationDelegate = self
        return webView
    }()

     //加载前端webview
    override func viewDidLoad() {
        super.viewDidLoad()
        self.urlStr = "这里是自己的网址/\(AntBoxSDKUtils.shared.antBoxURLParms)"
        self.webView.load(URLRequest.init(url: URL.init(string: self.urlStr!)!))
    }

    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        webView.evaluateJavaScript("sayHello('WebView你好!')") { (result, err) in
            print(result, err)
        }
    }

    func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
        print(message.body)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}

本文参考:https://tomoya92.github.io/2018/07/05/swift-webview-javascript/ ,更多方法交流可以家魏鑫:lixiaowu1129,一起探讨iOS相关技术!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WKWebView Swift3.0 一款IOS8以后的web加载神器 https://github.com/XFIOSXiaoFeng/SwiftWkWebView 别说了!!!!快上车 WKWebView 支持POST请求 加载本地页面 直接加载网页 JS交互 集成支付宝/微信URL支付功能 仿微信返回按钮 感谢大家的支持 OC版本将不再持续更新 业余爱好 QQ群:384089763 OC版本遗址:https://github.com/XFIOSXiaoFeng/WKWebView NO1 首先得允许访问HTTP链接 HTTPS权限: NSAppTransportSecurity NSAllowsArbitraryLoads API介绍 API属性 //设置navigationBarColor的颜色 var navigationBarColor: UIColor? //是否隐藏进度条 var isProgressHidden = false //注册MessageHandler 需要实现代理方法 var addJavaScriptAry = [String]() //执行JS 需要实现代理方法 var javaScript = String() //设置代理 weak var delegate : WKWebViewDelegate? //右边按钮的值 ItemTag:区分当前按钮 //实现代理方法才能调用点击事件 var rightBarButtonItemTitle : String? var rightBarButtonItemImage : String? var rightBarButtonItemImageH : String? var rightBarButtonItemTag : String? API方法 /// 普通URL加载方式 func load_UrlSting(string:String!) {} /// 加载本地HTML func load_HTMLSting(string:String!) {} /// POST方式请求加载 func load_POSTUrlSting(string:String!,postString:String!) {} /// 添加右侧按钮 func add_rightBarButtonItem(title:String?,image:String?,imageH:String?,itemTag:String?) {} /// 执行JavaScript代码 func run_JavaScript(script:String?) {} API代理方法 //点击右边按钮执行方法 @objc optional func didSelectRightItem(webView:WKWebView,itemTag:String) //注册JS执行代码 @objc optional func didAddScriptMessage(webView:WKWebView,message:WKScriptMessage) //页面执行JS方法 @objc optional func didRunJavaScript(webView:WKWebView,result:Any?,error:Error?)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值