近期和同事的项目中使用到了UIWebview的JSContext相关的特性
由于开始从ios7适配,可以用javascriptcore.framework,和h5的通信也相对以前简单了很多,不需要定义那么多的url shcema
具体javascript和native通过javascriptcore互相调用的例子可以看这个
http://justsee.iteye.com/blog/2036713
这里遇到一个tricky问题
JSContext这个对象会经常变化,在WebView开始load到finish load会变化,在finishload之后在页面内href链接到另一个页面也会变化
及时的获取到当前的jscontext对象非常关键
JSContext *ctx = [webView valueForKeyPath:@”documentView.webView.mainFrame.javaScriptContext”];
上面这种方式获取的时候,不能在context变化后及时知道
mac底下有个api,每次create新的contenxt就会有回调出来
@implementation NSObject (magic) - (void) webView: (id) unused didCreateJavaScriptContext: (JSContext*) ctx forFrame: (id) frame { // ... } @end
具体可以看这个开源工具:
https://github.com/TomSwift/UIWebView-TS_JavaScriptContext
这个开源工具里面有私有api调用,如果要是上传appstore要注意删除其中的几行代码