美文网首页
webView与JS交互

webView与JS交互

作者: anyurchao | 来源:发表于2016-12-30 10:03 被阅读94次
    1.使用JavaScriptCore框架
    2.js调用iOS分两种情况:
    一,js里面直接调用方法
    -(void)webViewDidFinishLoad:(UIWebView *)webView  {
    //网页加载完成调用此方法  
          
        //iOS调用js  
          
        //首先创建JSContext 对象(此处通过当前webView的键获取到jscontext)  
        JSContext *context=[webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];  
        
        //js调用iOS  
        //第一种情况  
        //其中test1就是js的方法名称,赋给是一个block 里面是iOS代码  
        //此方法最终将打印出所有接收到的参数,js参数是不固定的 我们测试一下就知道  
        context[@"test1"] = ^() {  
            NSArray *args = [JSContext currentArguments];  
            for (id obj in args) {  
                NSLog(@"%@",obj);  
            }  
        };  
        //此处我们没有写后台(但是前面我们已经知道iOS是可以调用js的,我们模拟一下)  
        //首先准备一下js代码,来调用js的函数test1 然后执行  
        //一个参数  
        NSString *jsFunctStr=@"test1('参数1')";  
        [context evaluateScript:jsFunctStr];  
          
        //二个参数  
        NSString *jsFunctStr1=@"test1('参数a','参数b')";  
        [context evaluateScript:jsFunctStr1];  
    
       }
    

    二,js里面通过对象调用方法

    class BaseWebViewController: UIViewController {
      /// JSObject
        lazy var jsObject:HLJSObject = {
            let obj = HLJSObject()
            obj.delegate = self
            return obj
        }()
    
     ///初始化JSObject
        func initJSObject() {
            let context = webView.valueForKeyPath("documentView.webView.mainFrame.javaScriptContext") as! JSContext
            context.setObject(jsObject, forKeyedSubscript: "JSInterface")
            
         }
    
      func webViewDidFinishLoad(webView: UIWebView){
    
             initJSObject()
    
    
       }
    }
    extension BaseWebViewController:HLJSObjectProtocol{
        // MARK: - 登录
        func isLogin(){
            
            let user_id = HLCheckUserID(true)
            if user_id == 1 {
                
                let vc = SB_Login.initialVC! as! UINavigationController
                presentPushEffect(vc, completion: {
                    
                })
            }else{
                webViewReoload()
            }
        }
    }
    
    import Foundation
    import JavaScriptCore
    
    @objc protocol HLJSObjectProtocol:JSExport {
        /// 登录
        func isLogin()
    }
    
    @objc class HLJSObject: NSObject,HLJSObjectProtocol {
        var delegate:HLJSObjectProtocol?
        /// 登录
        func isLogin(){
            delegate?.isLogin()
        }
    }
    
    
    

    相关文章

      网友评论

          本文标题:webView与JS交互

          本文链接:https://www.haomeiwen.com/subject/fmhpvttx.html