iOS JS交互总结,看这一篇文章就够了!

序言

JS交互方案总结 :

1、WebViewJavascriptBridge,适用于UIWebView和WKWebView,属于第三方框架,最便捷

2、WKScriptMessageHandler,只适用于WKWebView,iOS8+,原生写法

3、JavaScriptCore,只适用于UIWebView,iOS7+,原生写法

一、WebViewJavascriptBridge

1、生成一个JS文件,命名为mobile.js

2、JS文件中写上固定格式内容:

 3、写入你要交互的方法,这里以获取用户信息为例:

上述代码中function getUserInfo (){},可以理解为OC中方法的实现。下方window.mobilejs可以理解为方法的声明。

function格式较为固定,userName为入参,参数多时建议使用json。callback为返回值。

bridge.callHandler('getUserInfo', userName, callback)中,注意'getUserInfo'必须为'方法名'。

window.mobilejs中的mobilejs必须为生成的JS文件名(mobile.js),注意不带"."号。且方法名左右对应一致。

4、WK注入JS文件

​​​​​​​

 5、创建JS拦截

 这里data对应上面的userName。responseCallback (@"userId=123")对应callback

6、html中调用JS交互

7、function灵活运用

 

二、WKScriptMessageHandler

不借助三方库,直接使用原生实现。

1、JS文件(mobileOC.js)中的写法

 注意:   

(function() { 方法**** })(); 必须按照这样的固定格式,实现JS的交互。

window.webkit.messageHandlers.jsMethod.postMessage('');

jsMethod:方法名随便取。其他字段固定。

postMessage();括号里面不能为空,否则会报错,空字符('')也可以

2、注入JS拦截事件,在代理中响应事件

 

3、html中的调用

 三、JavaScriptCore

 1、JS文件(UIWebOC.js)中的写法 

2、拦截。这里注意UIWebView必须在webViewDidFinishLoad中注入JS、拦截JS

注意,此时jsContext关联的方法名已经是function内部的方法名了

 3、html中的调用

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本demo是WKWebView的基本使用和交互 ,实现了原生调用js的方法、js调用原生的方法、通过拦截进行交互的方法;修改内容 加入沙盒 / /加载沙盒 不带参数 // NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); // NSString * path = [paths objectAtIndex:0]; // path = [path stringByAppendingString:[NSString stringWithFormat:@"/app/html/index.html"]]; // NSURL *url = [NSURL URLWithString:[[NSString stringWithFormat:@"file://%@",path] stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLFragmentAllowedCharacterSet]] relativeToURL:[NSURL fileURLWithPath:NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject]]; // [self.wkView loadFileURL:url allowingReadAccessToURL:[NSURL fileURLWithPath: [paths objectAtIndex:0]]]; // 带参数 /* NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString * path = [paths objectAtIndex:0]; path = [path stringByAppendingString:[NSString stringWithFormat:@"/app/html/index.html"]]; NSURL * url = [NSURL fileURLWithPath:path isDirectory:NO]; NSURLComponents *urlComponents = [NSURLComponents componentsWithURL:url resolvingAgainstBaseURL:NO]; [queryItemArray addObject:[NSURLQueryItem queryItemWithName:@"version" value:[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]]]; [urlComponents setQueryItems:queryItemArray]; [self.wkView loadFileURL:urlComponents.URL allowingReadAccessToURL:[NSURL fileURLWithPath: [paths objectAtIndex:0]]]; */

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值