美文网首页
ios 上的webView使用(UIWebview &

ios 上的webView使用(UIWebview &

作者: helinyu | 来源:发表于2017-07-26 23:35 被阅读260次

    知识点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也要是字符串

    相关文章

      网友评论

          本文标题:ios 上的webView使用(UIWebview &

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