大多数情况下,我们一般都会用到js和本地交互,或者本地和js交互,所以,就记录一下,时间比较仓促,就先这么写写,后续还会补充一下iOS8新出的WKWebView的一些东西,今天先看webView
在一般情况下,我们通过一个函数来拿到所有在js中的请求就是这个
-(BOOL)webView:shouldStartLoadWithRequest:navigationType:
通过这个方法,我们可以得到js中发出的请求,也就是
window.location.href = "http://www.baidu.com";
这样的话,我们可以自己定义一些所谓的协议来满足我们的需求
<html>
<head>
<script type="text/javascript">
function goBaidu(){
window.location.href = "http://www.baidu.com";
}
function goNextPage(){
window.location.href = "goNextPage://str1=111&str2=222";
}
script>
head>
<body>
<h1 onclick="goBaidu()">this is a linkh1>
<h1 onclick="goNextPage()">this is a linkh1>
body>
html>
比如说这样,在这段html中,我们现实两行文字,各自点击,调用js的一个方法,第一个是去加载百度的网页,第二个是我们自己定义的,并且有两个参数
然后,我们就会在一开始的上边提到的函数中,拿到request
NSLog(@"%@",request.URL.scheme);
这时,我们这么打印的话,会看到不同的结果,一个是http 一个是goNextPage,这时,我们就可以去做不同的事情了
如果这么打印的话
NSLog(@"host : %@",request.URL.host);
我们会看到一个是 m.baidu.com
一个是str1=111&str2=222
这样我们也把参数传递过来了,至于做什么,就看自己的了
其实所谓的交互,也就是本地做一些操作的时候改变js的样式或者什么之类的东西,简单的说就是执行js方法
而对于这个,其实也是有现成的api的,很简单,很简单
stringByEvaluatingJavaScriptFromString:
后边传递一个字符串,可以使js方法名,也可以是js脚本,这个随意
比如在我们的html文件中有一个goBaidu的js函数,那么,我们就可以这样来调用这个函数
[webView stringByEvaluatingJavaScriptFromString:@"goBaidu()"];
真的不能再简单了。。。。
下边贴一下vc的代码
#import "ViewController.h"
@interface ViewController ()<UIWebViewDelegate>
@end
@implementation ViewController
{
UIWebView * webView;
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
webView = [[UIWebView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 400)];
webView.delegate = self;
NSString * filePath = [[NSBundle mainBundle]pathForResource:@"index" ofType:@"html"];
NSString * str = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
[webView loadHTMLString:str baseURL:nil];
[self.view addSubview:webView];
UIButton * button = [[UIButton alloc]initWithFrame:CGRectMake(0, 400, 100, 100)];
button.backgroundColor = [UIColor redColor];
[self.view addSubview:button];
[button addTarget:self action:@selector(click:) forControlEvents:UIControlEventTouchUpInside];
}
-(void)click:(UIButton *)button
{
[webView stringByEvaluatingJavaScriptFromString:@"goBaidu()"];
}
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSLog(@"host : %@",request.URL.host);
NSLog(@"absoluteString : %@",request.URL.absoluteString);
if ([request.URL.scheme isEqualToString:@"goNextPage"]) {
//do something your self;
}
NSLog(@"%@",request.URL);
return YES;
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
暂时就先这么多吧,之后再写WKWebView的,这个可是超级强大的