一:
首先导入JavaScriptCore.framework:
二.
在需要JS调用OC方法的.m文件中导入头文件
三.
在OC中进行JS执行环境配置,和指定JS调用的方法的OC代码执行体
四.
这个利用JavaScriptCore.framework框架,使JS直接调用OC代码的实质是:
在JS中定义好方法,在OC中指定执行体;
JS调用的还是JS的方法,而方法的执行体可以由OC代码中编写;
上次忘记附上html跟js文件了,在此附上,供大家参考:
html:
js中定义的方法:
注意点:
1.这是加载本地的html文件时,做的一个demo,至于加载服务器提供的html文件时js调用OC方法,我猜测应该在webView的代理方法
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;
里边做判断 是否加载的request中的URL是那个特定的html,如果是就在此方法中执行步骤三的操作;
2.这与不通过URL让JS直接调用OC方法,并不矛盾;
3.注意OC中定义的block代码块是跟js函数中的submit进行绑定,一定不能错;
关于上边提到的注意点1,笔者亲自实践,发现是不可行的,不过通过笔者苦逼的尝试,终于实现了JS直接调用OC本地方法;
在此在此做出补充:
首先,声明笔者项目开发情景是,加载一个重定向的html时调用执行OC的代码;
其次,方法配置步骤三,笔者测试应该放在webView加载完成的
- (void)webViewDidFinishLoad:(UIWebView *)webView{};监听方法中;
然后在配置完成后,通过OC执行JS中被配置过的JS中的脚本来达到调用OC的目的;
可能有点儿绕,不过细细体会一下还是能自圆其说的吧!!!
特别说明一下,代码中的isLoad是我在
// 监听网页的加载
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;
中通过
拦截到。
网上搜了好久都没有JS直接调用OC(非URL)本地方法特别有用的解决方案,通过自己的实践出不整理出来供大家参考,如果有什么不准确的地方,请大家留言指正,
谢谢。