iOS-JS交互(WebViewJavascriptBridge)

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

//

// ViewController.m

// JSAndIOS交互

//

// Created by apple on 15/7/31.

// Copyright (c) 2015年 tqh. All rights reserved.

//

#import "ViewController.h"

#import "WebViewjavascriptBridge.h"

@interface ViewController ()<UIWebViewDelegate>

@PRoperty WebViewJavascript

Bridge* bridge;

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

if (_bridge) { return; }

UIWebView* webView = [[UIWebView alloc] initWithFrame:self.view.bounds];

[self.view addSubview:webView];

[WebViewJavascriptBridge enableLogging];

//网页交互,网页发送消息给程序

_bridge = [WebViewJavascriptBridge bridgeForWebView:webView webViewDelegate:self handler:^(id data, WVJBResponseCallback responseCallback) {

NSLog(@"从JS收到消息: %@", data);

responseCallback(@"back");

}];

//网页交互,网页发送消息给程序

[_bridge registerHandler:@"testObjcCallback" handler:^(id data, WVJBResponseCallback responseCallback) {

NSLog(@"testObjcCallback called: %@", data);

responseCallback(@"back");

}];

[self renderButtons:webView];

[self loadExamplePage:webView];

}

- (void)renderButtons:(UIWebView*)webView {

UIFont* font = [UIFont fontWithName:@"HelveticaNeue" size:12.0];

UIButton *messageButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];

[messageButton setTitle:@"发送消息" forState:UIControlStateNormal];

[messageButton addTarget:self action:@selector(sendMessage:) forControlEvents:UIControlEventTouchUpInside];

[self.view insertSubview:messageButton aboveSubview:webView];

messageButton.frame = CGRectMake(10, 414, 100, 35);

messageButton.titleLabel.font = font;

messageButton.backgroundColor = [UIColor colorWithWhite:1 alpha:0.75];

UIButton *callbackButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];

[callbackButton setTitle:@"调用处理程序" forState:UIControlStateNormal];

[callbackButton addTarget:self action:@selector(callHandler:) forControlEvents:UIControlEventTouchUpInside];

[self.view insertSubview:callbackButton aboveSubview:webView];

callbackButton.frame = CGRectMake(110, 414, 100, 35);

callbackButton.titleLabel.font = font;

UIButton* reloadButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];

[reloadButton setTitle:@"重新加载webview" forState:UIControlStateNormal];

[reloadButton addTarget:webView action:@selector(reload) forControlEvents:UIControlEventTouchUpInside];

[self.view insertSubview:reloadButton aboveSubview:webView];

reloadButton.frame = CGRectMake(210, 414, 100, 35);

reloadButton.titleLabel.font = font;

}

//加载网页

- (void)loadExamplePage:(UIWebView*)webView {

//ExampleApp加载本地网页

NSString* htmlPath = [[NSBundle mainBundle] pathForResource:@"ExampleApp" ofType:@"html"];

NSString* appHtml = [NSString stringWithContentsOfFile:htmlPath encoding:NSUTF8StringEncoding error:nil];

NSURL *baseURL = [NSURL fileURLWithPath:htmlPath];

[webView loaDHTMLString:appHtml baseURL:baseURL];

}

#pragma mark - 事件监听

- (void)sendMessage:(id)sender {

//发送消息

[_bridge send:@"oc发送消息" responseCallback:^(id response) {

NSLog(@"sendMessage got response: %@", response);

}];

}

- (void)callHandler:(id)sender {

//发送消息

id data = @{ @"name": @"value" };

[_bridge callHandler:@"testJavascriptHandler" data:data responseCallback:^(id response) {

NSLog(@"testJavascriptHandler responded: %@", response);

}];

}

#pragma mark - UIWebViewDelegate

- (void)webViewDidStartLoad:(UIWebView *)webView {

NSLog(@"webViewDidStartLoad");

}

- (void)webViewDidFinishLoad:(UIWebView *)webView {

NSLog(@"webViewDidFinishLoad");

}

@end

github下载:https://github.com/marcuswestin/WebViewJavascriptBridge

百度云下载:http://pan.baidu.com/s/1kTnbpTd

js学习:http://www.w3school.com.cn/

http://www.fenesky.com/blog/2014/04/24/how-javascriptcore-works.html

http://www.cnblogs.com/ider/p/introduction-to-ios7-javascriptcore-framework.html

webkit学习:http://blog.csdn.net/column/details/webkit-in-deep.html

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航