使用JSExport进行JS交互时遇到的一个问题

Author Avatar
XibHe 5月 04, 2017
  • 在其它设备中阅读本文章

在使用JSExport与OC和JS进行通信,遇到一个问题,无法调用JS传递的最新购物车商品数量的交互方法。

解决方法

将之前的放在VC里的JS交互方法抽离到单独的一个类中,这个类继承NSObject。不做任何特别的处理,将

JSContext *context = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
context[@"jsObject"] = self;

这句代码,从

- (void)webViewDidFinishLoad:(UIWebView *)webView

移到,

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType

该代理方法中,就能每次都调用JS与OC的交互方法。

JavaScriptCore使用注意

JavaStript调用本地方法是在子线程中执行的,这里要根据实际情况考虑线程之间的切换,而在回调JavaScript方法的时候最好是在刚开始调用此方法的线程中去执行那段JavaStript方法的代码。

参考文献

iOS js oc相互调用(JavaScriptCore)(二)
ios 与 js交互一点心得

Demo

点击下载

遗留问题

这里只有获取购物车最新商品数量时,无法调用JS交互方法,其他的JS交互方法仍然可以调用。那么获取JSContext的时机是什么

–EOF–

若无特别说明,本站文章均为原创,转载请保留链接,谢谢