Wing的小站

  • 首页
  • IT新闻
  • 技术文章
  • 生活随笔
  • 休闲娱乐
  • 个人作品
  • 留言板
  • 关于博主
JavaFX,Unity3D,Android,IOS,技术教程,生活随笔
  1. 首页
  2. 技术文章
  3. 正文

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

2016年11月13日 4202点热度 0人点赞 0条评论

最近做一个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的原生功能了。

标签: IOS Swift
最后更新:2017年4月14日

wing1314

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

COPYRIGHT © 2023 Wing的小站. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

鄂ICP备17006951号-1

42011102000591