IOS Swift中UIWebView页面JS调用原生方法

最近做一个app,里面有一个功能是加载服务器返回的HTML5页面,但是页面中会调用JS方法执行IOS的原生代码。

网络搜了一下,不过大部分都是很老的代码了。事实上,实现起来也很简单。

首先我们要定义一个objc协议:

@objc protocol MyMethodProtocol: JSExport {
    func showTownDetail(_ id:String, _ name:String)
}

然后创建一个类继承NSObject,实现我们定义的协议:

class MyMethod : NSObject, JavaScriptMethodProtocol {
    private var vc:UIViewController?  //用于实现与UIViewController相关的方法
    private var url:String?  //个人项目使用,可以通过判断URL的不同,同一个方法实现不一样的效果
    init(url:String,viewController:UIViewController) {
        self.vc = viewController
        self.url = url
    }
    func showTownDetail(_ id: String, _ name: String) {
    }
}

接着通过我们的UIWebView获取JSContext来关联JS的方法:

self.context = mWebView.value(forKeyPath: "documentView.webView.mainFrame.javaScriptContext") as! JSContext?
self.context!.setObject(JavaScriptMethod(url: url!,viewController: self), forKeyedSubscript: "hello" as (NSCopying & NSObjectProtocol)!)

如上所示,我们定义了”hello”,这意味着我们在Web页面的JS中,通过调用hello.showTownDetail(xxx,xxx)来执行我们IOS中的方法。

这样就能简单在Web页面中调用IOS的原生功能了。

发表评论

电子邮件地址不会被公开。