您好,欢迎来电子发烧友网! ,新用户?[免费注册]

您的位置:电子发烧友网>源码下载>通讯/手机编程>

iOS系统webview与JS的交互

大小:0.3 MB 人气: 2017-09-25 需要积分:1

  昨天写了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%

      发表评论

      用户评论
      评价:好评中评差评

      发表评论,获取积分! 请遵守相关规定!