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

本文详细介绍如何在iOS开发中实现JavaScript直接调用Objective-C方法的过程。文章分享了一个使用JavaScriptCore框架的具体案例,包括配置执行环境、指定方法映射及在WebView加载完成后执行配置等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:

首先导入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)本地方法特别有用的解决方案,通过自己的实践出不整理出来供大家参考,如果有什么不准确的地方,请大家留言指正,

谢谢。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值