iOS系統(tǒng)webview與JS的交互
推薦 + 挑錯(cuò) + 收藏(0) + 用戶(hù)評(píng)論(0)
昨天寫(xiě)了Swift和JS的交互,既然寫(xiě)了就把OC的也寫(xiě)了出來(lái):
第一部分:webview與Js的交互
第二部分:設(shè)定cookie
第三部分:修改header頭
1
交互
#import “webView.h”
#import 《JavaCore/JavaCore.h》//系統(tǒng)支持庫(kù)
@protocol JSObjcDelegate 《JSExport》//定義web與JS交互的協(xié)議
-(void)goToNextActivity:(NSString *)urlStr;//JS需要調(diào)用的方法,參數(shù)可有可無(wú),根據(jù)需要設(shè)定
@end
@interface webView ()《UIWebViewDelegate,JSObjcDelegate》//遵守協(xié)議
@property (nonatomic,strong)JSContext * jsContext;//創(chuàng)建JSContext對(duì)象 我把它當(dāng)作上下文對(duì)象,用于連接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;
?。踫elf loadRequest:request];
}
return self;
}
-(void)webViewDidFinishLoad:(UIWebView *)webView{
self.jsContext = [webView valueForKeyPath:@“documentView.webView.mainFrame.javaContext”];
self.jsContext[@“myObj”] = self;//這里把self賦值給self.jsContext的myObj對(duì)象,那么在JS中就可以通過(guò)myObj調(diào)用oc方法了
self.jsContext.exceptionHandler = ^(JSContext *context, JSValue *exceptionValue) {
context.exception = exceptionValue;
NSLog(@“異常信息:%@”, exceptionValue);
};
}
//webview調(diào)用方法
-(void)goToNextActivity:(NSString *)urlStr{
NSLog(@“goToNextActivity str:%@”,urlStr);
}
@end
2
cookie
這里是每次請(qǐng)求的時(shí)候都進(jìn)行設(shè)定,所以方法寫(xiě)在了web開(kāi)始加載的方法里面
- (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) {
// 設(shè)定 cookie
NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:
?。跱SDictionary dictionaryWithObjectsAndKeys:
?。踨equest.URL host], NSHTTPCookieDomain,
[request.URL path], NSHTTPCookiePath,
key,NSHTTPCookieName,
obj,NSHTTPCookieValue,
nil]];
?。郏跱SHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
// NSLog(@“cookie = %@”,cookie);
}];
return YES;
}
1
header
同樣是寫(xiě)在了webview開(kāi)始加載的方法里面
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
NSMutableURLRequest *mutableRequest = [request mutableCopy];
//這里加了一些判斷,避免死循環(huán),因?yàn)樾薷耐瓿珊體ebview需要重新加載request (其中DEFAULTS 是NSUserDefaults存了一些后臺(tái)程序返回的內(nèi)容)
非常好我支持^.^
(0) 0%
不好我反對(duì)
(0) 0%
下載地址
iOS系統(tǒng)webview與JS的交互下載
相關(guān)電子資料下載
- 智能機(jī)器人RJSIIZ系列關(guān)節(jié)模組助力智慧醫(yī)療技術(shù)突破 44
- systemverilog讀取json文件? 60
- 導(dǎo)軌式直流電能表DJSF1352-RN 太陽(yáng)能光伏、電信基站用 雙路直流輸入 90
- C結(jié)構(gòu)體與JSON快速互轉(zhuǎn)庫(kù)介紹 86
- RT-Thread使用cjson軟件包發(fā)送64位長(zhǎng)整型數(shù)據(jù) 100
- 【開(kāi)源三方庫(kù)】Fuse.js:強(qiáng)大、輕巧、零依賴(lài)的模糊搜索庫(kù) 136
- 如何解決表單重復(fù)提交的問(wèn)題 68
- Spring Boot時(shí)配置JSON序列化選項(xiàng)的幾種方法 142
- QT原生的QJson是否有更優(yōu)雅的方法來(lái)封裝一些Json對(duì)象 224
- 如何用C語(yǔ)言進(jìn)行json的序列化和反序列化 228