iOS开发 ----- webView和JS的简单交互

webView和JS的简单操作

大多数情况下,我们一般都会用到js和本地交互,或者本地和js交互,所以,就记录一下,时间比较仓促,就先这么写写,后续还会补充一下iOS8新出的WKWebView的一些东西,今天先看webView

1. js与本地交互

在一般情况下,我们通过一个函数来拿到所有在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 这样我们也把参数传递过来了,至于做什么,就看自己的了

2.本地与js交互

其实所谓的交互,也就是本地做一些操作的时候改变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的,这个可是超级强大的

你可能感兴趣的:(iOS学习)