iOS系统webview与JS的交互
昨天写了Swift和JS的交互,既然写了就把OC的也写了出来:
第一部分:webview与Js的交互
第二部分:设定cookie
第三部分:修改header头
1
交互
#import “webView.h”
#import 《JavaCore/JavaCore.h》//系统支持库
@protocol JSObjcDelegate 《JSExport》//定义web与JS交互的协议
-(void)goToNextActivity:(NSString *)urlStr;//JS需要调用的方法,参数可有可无,根据需要设定
@end
@interface webView ()《UIWebViewDelegate,JSObjcDelegate》//遵守协议
@property (nonatomic,strong)JSContext * jsContext;//创建JSContext对象 我把它当作上下文对象,用于连接JS和OC
@end
@implementation webView
-(instancetype)initWithFrame:(CGRect)frame url:(NSURL *)url{
self = [super initWithFrame:frame];
if (self) {
NSURLRequest *request = [NSURLRequest requestWithURL:url];
self.delegate = self;
[self loadRequest:request];
}
return self;
}
-(void)webViewDidFinishLoad:(UIWebView *)webView{
self.jsContext = [webView valueForKeyPath:@“documentView.webView.mainFrame.javaContext”];
self.jsContext[@“myObj”] = self;//这里把self赋值给self.jsContext的myObj对象,那么在JS中就可以通过myObj调用oc方法了
self.jsContext.exceptionHandler = ^(JSContext *context, JSValue *exceptionValue) {
context.exception = exceptionValue;
NSLog(@“异常信息:%@”, exceptionValue);
};
}
//webview调用方法
-(void)goToNextActivity:(NSString *)urlStr{
NSLog(@“goToNextActivity str:%@”,urlStr);
}
@end
2
cookie
这里是每次请求的时候都进行设定,所以方法写在了web开始加载的方法里面
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
NSDictionary *dic = @{@“TOKEN”:[DEFAULTS objectForKey:@“token”],@“UID”:[DEFAULTS objectForKey:@“userID”]};
[dic enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
// 设定 cookie
NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:
[NSDictionary dictionaryWithObjectsAndKeys:
[request.URL host], NSHTTPCookieDomain,
[request.URL path], NSHTTPCookiePath,
key,NSHTTPCookieName,
obj,NSHTTPCookieValue,
nil]];
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
// NSLog(@“cookie = %@”,cookie);
}];
return YES;
}
1
header
同样是写在了webview开始加载的方法里面
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
NSMutableURLRequest *mutableRequest = [request mutableCopy];
//这里加了一些判断,避免死循环,因为修改完成后webview需要重新加载request (其中DEFAULTS 是NSUserDefaults存了一些后台程序返回的内容)
非常好我支持^.^
(0) 0%
不好我反对
(0) 0%
下载地址
iOS系统webview与JS的交互下载
相关电子资料下载
- 智能机器人RJSIIZ系列关节模组助力智慧医疗威廉希尔官方网站 突破 44
- systemverilog读取json文件? 60
- 导轨式直流电能表DJSF1352-RN 太阳能光伏、电信基站用 双路直流输入 90
- C结构体与JSON快速互转库介绍 86
- RT-Thread使用cjson软件包发送64位长整型数据 100
- 【开源三方库】Fuse.js:强大、轻巧、零依赖的模糊搜索库 136
- 如何解决表单重复提交的问题 68
- Spring Boot时配置JSON序列化选项的几种方法 142
- QT原生的QJson是否有更优雅的方法来封装一些Json对象 224
- 如何用C语言进行json的序列化和反序列化 228