码迷,mamicode.com
首页 > Web开发 > 详细

UIWebView,WKWebView 与js交互

时间:2016-02-21 22:52:23      阅读:1056      评论:0      收藏:0      [点我收藏+]

标签:

现在越来越多的APP需要进行网页之间的交互了,而在iOS中,加载网页的方式为UIWebView与WKWebView这两个控件。

今天就来讲一讲这两个控件怎么进行js交互吧。至于这两个控件之间的区别应该都懂。。那我就不说了。

1、UIWebView

- (nullable NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script;

在UIWebView中提供了这个方法,这个方法就是用来执行js的

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
            <title>Title</title>
            
            <style>
                p{
                    text-align: center;
                    margin-top: 20px;
                }
            button{
                
                margin-left: 40%;
            }
                </style>
    </head>
    <body id="body">
        
        <p id="p">4秒后被删除</p>
        
        <button onclick="clickButtonFunc()">调用相册</button>
        
        <script type="text/javascript">
            
            
            function clickButtonFunc(){
                
                window.location.href = pickView;
            }
        </script>
    </body>
</html>

这段是html的代码。

 

-(NSString *)javaScriot
{
    NSString * p = @"var  p = document.getElementById(‘p‘);";
    NSString * r = @"p.remove();";
    NSString * java = [NSString stringWithFormat:@"%@%@",p,r];
    return java;
}

        [self.webView stringByEvaluatingJavaScriptFromString:[self javaScriot]];

执行这段代码就是删除网页上的一个p标签,这个是oc调用js,那么当然也有js调用oc的情况

 

这两个是UIWebView的代理方法

是否允许执行网页请求。

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;

开始执行网页请求

- (void)webViewDidStartLoad:(UIWebView *)webView;

你可以在这两个代理中任选一个实现以下代码,而我是在第一个执行的

    if ([webView.request.URL.lastPathComponent isEqualToString:@"pickView"])
    {
        NSLog(@"pickView");
        UIImagePickerController * pick = [UIImagePickerController new];
        pick.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
        pick.delegate = self;
        [self presentViewController:pick animated:YES completion:nil];
    }

但你点击网页上的按钮是,就可以调用系统相册了。这些就是UIWebView的js交互了

 

 

 

接下来就是WKWebView

同样的,WKWebView也提供了调用js的函数

- (void)evaluateJavaScript:(NSString *)javaScriptString completionHandler:(void (^ __nullable)(__nullable id, NSError * __nullable error))completionHandler;

这个就是WKWebView调用js的函数了

    [_webView evaluateJavaScript:@"var p = document.getElementById(‘p‘);" completionHandler:nil];

同样的,效果依旧是删除网页上的p标签。

 

还有就是js调用oc的了,虽然在网上有很多文档,但是我没有用那些的文档,我用的依旧是代理方法。

- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(null_unspecified WKNavigation *)navigation

加载网页的时候会调用

依旧是执行上面的判断语句。可以打开系统相册。

 

 

以上这些就是oc与js之间的相互调用了。如果大家有更好的方法,欢迎大家一起讨论。由于代码量并不是很多,再加上代码写的比较乱,demo句不拿出来了。

下次回合大家讲一讲JavaScriptCore 来进行js的交互的。

 

 

 

 

 

 

 

 

UIWebView,WKWebView 与js交互

标签:

原文地址:http://www.cnblogs.com/lsios/p/5205747.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!