一.OC调用javascrip
今天在做项目时,要求将html数据用网页控件显示出来,给出的html数据是
<p><img src="/uploads/ueditor/1466598011338154.jpg" style="" title="1466598011338154.jpg"/></p><p><img src="/uploads/ueditor/1466598011168049.jpg" style="" title="1466598011168049.jpg"/></p><p><br/></p><p><img src="/uploads/ueditor/1466598011419605.jpg" style="" title="1466598011419605.jpg"/></p><p><img src="/uploads/ueditor/1466598011981633.jpg" style="" title="1466598011981633.jpg"/></p><p><br/></p>
最终做出来的效果是
首先,建立一个html文档。
<html>
<head>
<meta charset = "UTF-8">
<script type="text/javaScript">
//这个方法将html写入body中
function postStr(str1){
document.write(str1);
}
//这个方法设置图片的格式
function widthFit(width1)
{
//获取所有的图片imgs数组
var imgs=document.getElementsByTagName('img');
for(i=0;i <imgs.length;i++){
var src = imgs[i].src;
//添加http前缀
if(src.substr(0,4)!='http')
{
src = src.substr(7);
imgs[i].src = 'http://114.55.231.81/meigou'+src;
}
//设置图片的宽度为屏幕宽度
imgs[i].width = width1;
};
}
</script>
</head>
<body>
//需要将传入的数据添加到此,所以要oc调用两个script方法;
//方法function postStr(str1)讲数据写入
//方法function widthFit(width1)设置数据的格式
</body>
</html>
拖入一个webView,
在ViewController.m中设置好webView代理,并调用html中的JavaScript方法;
#import "ViewController.h"
#define SCREENWIDTH [UIScreen mainScreen].bounds.size.width
@interface ViewController ()<UIWebViewDelegate,NSURLSessionDelegate>
//拖入的webView
@property (weak, nonatomic) IBOutlet UIWebView *webView;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//设置webView代理
self.webView.delegate = self;
//设置webView url路径
NSURL *url = [[NSBundle mainBundle]URLForResource:@"index" withExtension:@"html"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
//webView 加载请求
[self.webView loadRequest:request];
}
#pragma mark -- 这是webView的代理方法 当网页加载完后执行
-(void)webViewDidFinishLoad:(UIWebView *)webView
{
//需要加载的html数据,从网络接口获取,这里举例直接写
NSString *str1 = @"<p><img src=\"http://114.55.231.81/meigou/uploads/ueditor/1478241505114807.jpg\" style=\"\" title=\"1478241505114807.jpg\"/></p><p><img src=\"http://114.55.231.81/meigou/uploads/ueditor/1478241505421988.jpg\" style=\"\" title=\"1478241505421988.jpg\"/><img src=\"http://114.55.231.81/meigou/uploads/ueditor/1478241572708383.jpg\" title=\"1478241572708383.jpg\" alt=\"20161104_141649_002.jpg\"/></p><p><img src=\"http://114.55.231.81/meigou/uploads/ueditor/1478241506884794.jpg\" style=\"\" title=\"1478241506884794.jpg\"/></p><p><br/></p>";
//调用html中的第一个js方法,写入数据
[webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"postStr('%@');",str1]];
//调用html中的第二个js方法,设置格式,图片的宽度为屏幕宽度
[webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"widthFit('%f');",SCREENWIDTH]];
}
@end
当web网页加载完后,会自动调用index.html中的两个JavaScript方法。
二.JavaScript调用OC
同样在html中,我们先写一个button,button的点击事件是一个JavaScript方法。这个方法中调用window.location.href 来打开一个URL页面。
在oc中,用UIwebView的的一个代理方法,来获取到window.location.href要打开的URL字符串,判断该字符串后可以进行一系列的操作。
index.html
<html>
<head>
<meta charset = "UTF-8">
</head>
<body>
<button onclick = "getImage();">访问相册</button>
<script>
function getImage()
{
window.location.href = "xw://getImage";
}
</script>
</body>
</html>
ViewController.m
#import "ViewController.h"
@interface ViewController ()<UIWebViewDelegate>
@property (weak, nonatomic) IBOutlet UIWebView *webView;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
NSURL *url = [[NSBundle mainBundle]URLForResource:@"index" withExtension:@"html"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[self.webView loadRequest:request];
}
#pragma mark -- 操作网页
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSString *str = request.URL.absoluteString;
NSLog(@"%@",str);
if([str isEqualToString:@"xw://getImage"])
{
[self getImage];
}
return YES;
}
- (void)getImage
{
//这是被调用的方法
NSLog(@"这是被调用的方法");
}
@end
如此就可以在JavaScript中调用到oc的方法了。