#import <WebViewJavascriptBridge.h>

///

@interface ZWBridgeViewController ()<WKNavigationDelegate, WKUIDelegate, UIGestureRecognizerDelegate>

@property (nonatomicstrong) ZWCommonNavBar *navBar;

@property (nonatomicstrong) WKWebView *webView;

@property (nonatomicstrong) WebViewJavascriptBridge *bridge;

@property (nonatomiccopy) NSString *urlStr;

@property (nonatomiccopy) NSString *webTitle;

@end

@implementation ZWBridgeViewController

- (instancetype)initWithParams:(NSDictionary *)params {

self = [super init];

if (self) {

}

return self;

}

- (void)viewDidAppear:(BOOL)animated

{

[super viewDidAppear:animated];

if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {

self.navigationController.interactivePopGestureRecognizer.delegate = self;

}

}

- (void)viewWillDisappear:(BOOL)animated

{

[super viewWillDisappear:animated];

[SVProgressHUD dismiss];

if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {

self.navigationController.interactivePopGestureRecognizer.delegate = nil;

}

}

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer

{

return NO;

}

- (void)viewDidLoad {

[super viewDidLoad];

[SVProgressHUD show];

NSLog(@"%@",self.urlStr);

[self configNavBar];

[self configWebView];

[self configBridge];

[self configBridgeRegister];

[self configBridgeCallHander];

}

- (void)configNavBar {

self.titlle = ""

}

- (void)configWebView {

NSURL *url = [NSURL URLWithString:self.urlStr];

NSURLRequest *request = [NSURLRequest requestWithURL:url];

[self.webView loadRequest:request];

}

- (void)configBridge {

// 开启日志

[WebViewJavascriptBridge enableLogging];

self.bridge = [WebViewJavascriptBridge bridgeForWebView:self.webView];

[self.bridge setWebViewDelegate:self];

}

#pragma mark JS Call OC

- (void)configBridgeRegister {

kWeakSelf(self);

// 商品详情

[self.bridge registerHandler:@"func" handler:^(id data, WVJBResponseCallback responseCallback) {

NSDictionary *params = data;

NSDictionary *dic = @{

@"goodsId" : @([params[@"productId"] integerValue])

};

UIViewController *vc =

[weakself.navigationController pushViewController:vc animated:YES];

}];

[self.bridge registerHandler:@"nativeHomePage" handler:^(id data, WVJBResponseCallback responseCallback) {

[weakself zw_toHomeRootViewController];

}];

[self.bridge registerHandler:@"nativeGoback" handler:^(id data, WVJBResponseCallback responseCallback) {

[weakself.navigationController popviewcontroller]

}];

[self.bridge registerHandler:@"nativeOrderList" handler:^(id data, WVJBResponseCallback responseCallback) {

NSDictionary *params = @{

@"index" : @(0)

};

UIViewController *vc = [[CTMediator sharedInstance] ymd_mediator_MyOrderViewControllerWithParams:params];

[weakself.navigationController pushViewController:vc animated:YES];

BOOL closePage = [data[@"closePage"] integerValue];

if (closePage) {

NSMutableArray *mArray = [NSMutableArray arrayWithArray: weakself.navigationController.viewControllers];

[mArray removeObjectAtIndex: weakself.navigationController.viewControllers.count - 2];

weakself.navigationController.viewControllers = [NSArray arrayWithArray: mArray];

}

}];

[self.bridge registerHandler:@"nativeOrderListDetail" handler:^(id data, WVJBResponseCallback responseCallback) {

NSDictionary *resultData = data[@"resultData"];

NSDictionary *dic = @{

@"orderId" : @([resultData[@"orderId"] integerValue])

};

UIViewController *vc = [[CTMediator sharedInstance] ymd_mediator_MyOrderDetailViewControllerWithParams:dic];

[self.navigationController pushViewController:vc animated:YES];

BOOL closePage = [data[@"closePage"] integerValue];

if (closePage) {

NSMutableArray *mArray = [NSMutableArray arrayWithArray: weakself.navigationController.viewControllers];

[mArray removeObjectAtIndex: weakself.navigationController.viewControllers.count - 2];

weakself.navigationController.viewControllers = [NSArray arrayWithArray: mArray];

}

}];

[self.bridge registerHandler:@"nativeShare" handler:^(id data, WVJBResponseCallback responseCallback) {

NSDictionary *resultData = data[@"resultData"];

ZWFreeOrderShareVC *vc = [[ZWFreeOrderShareVC alloc] init];

vc.shareModel = shareModel;

[self.navigationcontroller push:vc animate:ture]

}];

[self.bridge registerHandler:@"nativeDominosDetail" handler:^(id data, WVJBResponseCallback responseCallback) {

NSDictionary *resultData = data[@"resultData"];

//        NSDictionary *relayParams = @{

//                                      @"dominosId" : @([resultData[@"dominosId"] integerValue]),

//                                      @"dominosOrderId" : @([resultData[@"dominosOrderId"] integerValue]),

//                                      @"type" : @(1)

//                                      };

NSDictionary *userInfo = @{

@"dominosOrderId" : @([resultData[@"dominosOrderId"] integerValue]),

};

[[NSNotificationCenter defaultCenter] postNotificationName:kZWFreeOderSuccessNotification object:nil userInfo:userInfo];

NSMutableArray *mArray = [NSMutableArray arrayWithArray: self.navigationController.viewControllers];

[mArray removeObjectAtIndex: self.navigationController.viewControllers.count - 1];

self.navigationController.viewControllers = [NSArray arrayWithArray: mArray];

   //[self.navigationcontroller push:vc animate:ture]

}];

}

#pragma mark OC Call JS

- (void)configBridgeCallHander {

[self.bridge callHandler:@"ocCallJs" data:@{@"name": @"James call"} responseCallback:^(id responseData) {

}];

}

#pragma mark WKNavigationDelegate

- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {

[webView evaluateJavaScript:@"document.documentElement.style.webkitUserSelect='none';" completionHandler:nil];

[webView evaluateJavaScript:@"document.documentElement.style.webkitTouchCallout='none';" completionHandler:nil];

[SVProgressHUD dismiss];

}

#pragma mark KVO

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{

if ([keyPath isEqualToString:@"title"]) {

if (object == self.webView) {

self.navBar.title = self.webView.title;

else {

[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];

}

else {

[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];

}

}

#pragma mark Lazy

- (WKWebView *)webView {

if (!_webView) {

_webView = [[WKWebView alloc] init];

_webView.navigationDelegate = self;

_webView.UIDelegate = self;

[_webView addObserver:self forKeyPath:@"title" options:NSKeyValueObservingOptionNew context:NULL];

[self.view addSubview:_webView];

[_webView mas_makeConstraints:^(MASConstraintMaker *make) {

make.edges.mas_equalTo(UIEdgeInsetsMake(k_Height_NavBar, 0, 0, 0));

}];

}

return _webView;

}

iOS 与 js交互的其一方法 WebViewJavascriptBridge的使用的更多相关文章

  1. iOS与JS交互实战篇(ObjC版)

    前言 ObjectiveC与Js交互是常见的需求,可对于新手或者所谓的高手而言,其实并不是那么简单明了.这里只介绍iOS7.0后出来的JavaScriptCore framework. 关于JavaS ...

  2. iOS javascript js 交互

    //JS里的一个回调.比如网页上的某个按钮点一下之后.JS会调用setKey这个方法. JSContext *context1 = [self.startView valueForKeyPath:@& ...

  3. ios与js交互获取webview元素和赋值

    使用webview的stringByEvaluatingJavaScriptFromString的方法交互,直接提供实例. 下载:http://download.csdn.net/detail/hey ...

  4. iOS与JS交互-WKWebView

    iOS移动端应用中,一般都会嵌入网页,在网页中处理的结果需要反馈给iOS让移动端做出相应的处理(例如页面跳转), 1.webview的配置 2.代理方法中拿到事件进行处理 二.JS中的配套出发事件 当 ...

  5. android与JS交互,互相调用方法,跳转到网页

    在main下面New - Folder - Assets Folder,在Assets下面新建一个js_android.html <html><head> <meta h ...

  6. html与ios交互方法 WebViewJavascriptBridge

    WebViewJavascriptBridge 1.html调用ios的方法 <!DOCTYPE html> <html lang="en"> <he ...

  7. iOS(WKWebView)OC与JS交互 之三

      随着H5功能愈发的强大,没进行过混合开发的小伙们都不好意思说自己能够独立进行iOS的app开发,在iOS7操作系统下,常用的native,js交互框架有easy-js,WebViewJavascr ...

  8. iOS与JS开发交互总结

    hybrid.jpg 前言 Web 页面中的 JS 与 iOS Native 如何交互是每个 iOS 猿必须掌握的技能.而说到 Native 与 JS 交互,就不得不提一嘴 Hybrid. Hybri ...

  9. OC与JS交互之UIWebView

    随着H5的强大,hybrid app已经成为当前互联网的大方向,单纯的native app和web app在某些方面显得就很劣势.关于H5的发展史,这里有一篇文章推荐给大家,今天我们来学习最基础的基于 ...

随机推荐

  1. java基础之 类型转换

    一.自动类型转换 1.java中不同类型的数据在计算时,为保证数据的精度,数据的类型会以大容量的类型为主: 2.自动类型转换的排序: char.byte.short -> int -> l ...

  2. Servlet相关配置

    配置方式 webXML 定义标签<urlpartten>Servlet访问路径 注解 定义的<urlpartten>数组:可以为一个servlet定义多个访问路径. packa ...

  3. n皇后(位运算)

    一般解法 算法思路: 对于所有的位置,判断能不能放: 能放就放,处理: 不可行,回溯: 剪枝: 不能在同一行 deep++; 不能在同一列 不能在同一斜线 check k; for(i = 1; i ...

  4. Mybaits(11)延迟加载

    一.概述 1.概念 就是在需要用到数据时才去进行加载,不需要用的数据就不加载数据.延迟加载也称为懒加载. 2.优缺点 优点:先从单表查询,需要时再从关联表去关联查询,大大提高数据库性能,因为查询单表要 ...

  5. 2.17NOIP模拟赛(by hzwer) T3 小奇回地球

    [题目背景] 开学了,小奇在回地球的路上,遇到了一个棘手的问题. [问题描述] 简单来说,它要从标号为 1 的星球到标号为 n 的星球,某一些星球之间有航线. 由于超时空隧道的存在,从一个星球到另一个 ...

  6. net core,redis的安装和试用

    一.window上面安装reids 在github上面下载,地址 安装完成后,进入安装目录打开redis服务, 这里双击Redis服务器即可启动Redis. 二.安装redis可视化工具 命令行操作r ...

  7. 题解【洛谷P2279】[HNOI2003]消防局的设立

    题目描述 2020年,人类在火星上建立了一个庞大的基地群,总共有\(n\)个基地.起初为了节约材料,人类只修建了\(n-1\)条道路来连接这些基地,并且每两个基地都能够通过道路到达,所以所有的基地形成 ...

  8. Linux - curl 基本使用

    1. 概述 我接触过的很多服务端调试, 接口测试, 最终都落到了这个地方 简答介绍 curl 的使用 尽量循序渐进, 因为我也不太熟悉 大概会提到的命令 curl curl -v curl -s cu ...

  9. 【音乐欣赏】《Forget》 - The Tech Thieves

    曲名:Forget 作者:The Tech Thieves [00:00.000] 作曲 : Mark Emmanuel/Alia May Plesa-Topham [00:01.000] 作词 : ...

  10. Linux tasklet 和workqueue学习

    中断服务程序一般都是在中断请求关闭的条件下执行的,以避免嵌套而使中断控制复杂化.但是,中断是一个随机事件,它随时会到来,如果关中断的时间太长,CPU就不能及时响应其他的中断请求,从而造成中断的丢失.因 ...