一.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>
要加載html網頁,需要用到UIWebView;
拖入一個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的方法了。