您的位置:首页 > Web前端 > JavaScript

利用JS 直接调用执行OC代码,非提取URL

2016-03-12 09:35 549 查看
一:

首先导入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)本地方法特别有用的解决方案,通过自己的实践出不整理出来供大家参考,如果有什么不准确的地方,请大家留言指正,
谢谢。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: