博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS-JS交互 (WebViewJavascriptBridge)
阅读量:5742 次
发布时间:2019-06-18

本文共 3546 字,大约阅读时间需要 11 分钟。

//
//
  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 WebViewJavascriptBridge* 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下载:

 百度云下载:

 js学习:

 

 

 webkit学习:

转载于:https://www.cnblogs.com/hxwj/p/4692876.html

你可能感兴趣的文章
Nginx+Squid+php-fpm整合与配置
查看>>
TFS 2012研发管理能力(4)
查看>>
Raid
查看>>
SpringBoot2 - AOP - 实现鉴权 [管理员 | 前端 | 匿名用户]
查看>>
nagios设置邮件告警
查看>>
Lync 小技巧-5-当前已暂停共享
查看>>
公开课视频-《第13章 部署-Citrix-负载均衡器-NetScaler VPX 10.5》(全部完结!!!)
查看>>
监控系统--建表
查看>>
Linux下显示IP地理位置信息的小工具-nali
查看>>
变态的windows----OERR: ORA-27100 shared memory realm already exists
查看>>
Mysql写入时如果唯一、索引,则更新该行..
查看>>
The AD RMS Service Connection Point
查看>>
Bulk Convert DOC to DOCX
查看>>
如何排查Windows操作系统注销关机重启超慢故障
查看>>
php构造json数组与对象
查看>>
CentOS6.5安装docker环境
查看>>
写shell的事情
查看>>
ssh登陆限制
查看>>
负载均衡之Haproxy配置详解(及httpd配置)
查看>>
linux虚拟机拷贝之后联网出错
查看>>