ios 上的webView使用(UIWebview & WKWebView)

知识点1:
self.jsContext = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
后面的ocumentView.webView.mainFrame.javaScriptContext 这个似乎是固定的,可以写成为一个常量,以为在js代码执行的时候都会有这个内容;这个是在使用JSC(javascriptcore)时。
如果对这个变量进行修改,可能会发生错错误如下;
2017-07-26 11:30:14.524875+0800 testJavascriptCore[12808:3733652] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIWebView 0x102713c70> valueForUndefinedKey:]: this class is not key value coding-compliant for the key sudf.'

——————————————

知识点2:javascript中的JSContext传输数据可以有两种方式:block和JSExport协议
通过block可以直接讲某个功能的函数,注入给JSContext,使其调用,但要注意内存泄露
通过继承JSExport协议,可以将OC的方法,属性注入给JSContext,然后调用;
似乎使用JSExport的方法比较多

——————————————

知识点3: 内存管理(oc & js)
Objective-C的内存管理机制是引用计数,JavaScript的内存管理机制是垃圾回收。在大部分情况下,JavaScriptCore能做到在这两种内存管理机制之间无缝无错转换,但也有少数情况需要使用到JSManagedValue对象解决,后面会给出对应链接。

——————————————

知识点4:WKWebView
iOS 8 引入WKWebView, WKWebView 不支持JavaScriptCore的方式但提供message handler的方式为JavaScriptObjective-C 通信.

——————————————

知识点5: WebViewJavascriptBridge 类中的js;解决js格式,可以换行
为了格式化,作者用了个宏#define wvjb_js_func(x) #x, 确实是个解决定义字符串不能换行问题的好办法. 结束的时候去掉宏定义: #undef wvjb_js_func

知识点6: ios实现js调用oc


格式,注入传入的方法名或者说是label也要是字符串
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 随着H5技术的兴起,在iOS开发过程中,难免会遇到原生应用需要和H5页面交互的问题。其中会涉及方法调用及参数传值等...
    Chris_js阅读 3,114评论 1 8
  • JavaScriptCore框架主要是用来实现iOS与H5的交互。由于现在混合编程越来越多,H5的相对讲多,所以研...
    水灵芳蕥阅读 1,438评论 1 8
  • 跟原生开发相比,H5的开发相对来一个成熟的框架和团队来讲在开发速度和开发效率上有着比原生很大的优势,至少不用等待审...
    大冲哥阅读 1,865评论 0 7
  • 本博客主要分以下几个方面来介绍iOS中的JavaScriptCore JavaScriptCore简介 JavaS...
    dullgrass阅读 4,293评论 1 38
  • 初衷 其实,我会看嫌疑人X的献身,是因为之前高中时身边的朋友和同学热烈推荐过,他们当时推荐的理由我没记错的好像是因...
    kaka酱爱胡说阅读 486评论 1 3