iOS webview与Js的交互。以及修改cookie、header头
来源:互联网 发布:linux ftp登录 编辑:程序博客网 时间:2024/06/06 03:12
昨天写了swift和JS的交互,既然写了就把OC的也写了出来:
第一部分:webview与Js的交互
第二部分:设定cookie
第三部分:修改header头
一:交互
#import "webView.h"#import <JavaScriptCore/JavaScriptCore.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.javaScriptContext"]; 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
二: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;}
三:header:
同样是写在了webview开始加载的方法里面
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{ NSMutableURLRequest *mutableRequest = [request mutableCopy];//这里加了一些判断,避免死循环,因为修改完成后webview需要重新加载request (其中DEFAULTS 是NSUserDefaults存了一些后台程序返回的内容) if (!request.allHTTPHeaderFields[@"CITY"]) { [mutableRequest addValue:[DEFAULTS objectForKey:@"city"] forHTTPHeaderField:@"CITY"]; [self loadRequest:request]; }else if(![[DEFAULTS objectForKey:@"city"] isEqualToString:request.allHTTPHeaderFields[@"CITY"]]) { [mutableRequest setValue:[DEFAULTS objectForKey:@"city"] forHTTPHeaderField:@"CITY"]; request = [mutableRequest copy]; [self loadRequest:request]; } return YES;}
0 0
- iOS webview与Js的交互。以及修改cookie、header头
- iOS webview与JS的交互;以及修改cookie、header头
- ios webview与JS的交互
- iOS开发-WebView与JS的交互
- ios webView与js的交互
- iOS Webview与js的交互
- iOS webView与本地js的交互
- iOS webView 与js交互
- iOS webView与js交互
- WebView的使用以及Android与Js的交互
- WebView的使用以及Android与Js的交互
- android中加载webview以及与JS的交互
- WebView与js的交互
- js与webView的交互
- WebView 与 JS 的交互
- webView 与 JS 的交互
- WebView与Js的交互
- webview与js的交互
- Android 5.0 CTS 代码修改日记
- Unity3D 自动添加Fbx Animation Event
- SpringBoot之Mybatis篇(注解&配置文件)(MVC版)
- 欢迎使用CSDN-markdown编辑器
- 数据结构——离散事件模拟
- iOS webview与Js的交互。以及修改cookie、header头
- Access-Control-Allow-Origin与跨域
- Oracle与Sql Serer的链接桥梁之透明网关的部署与配置详解(二)安装GateWays
- 关于Monkey的一切都在这里
- Java HashMap、HashTable详解
- Problems encountered during text search
- Android架构思考(模块化、多进程)(转载学习)
- Linux上部署web应用(mysql,tomcat)
- js事件冒泡和委托