zoukankan      html  css  js  c++  java
  • Objective-C UIWebview JS 交互

    一、在OC中调用网页中的 js 方法。
    • Objective-C 代码

    [self.webView stringByEvaluatingJavaScriptFromString:@"alertMessage('弹窗')"];
    
    • 网页 JS 中方法

    function alertMessage(message) {
    
        alert(message);
    }
    

     二、网页超链接调用Objective-C中的方法

    1.设置webView的代理<UIWebViewDelegate>
    2.实现代理方法shouldStartLoadWithRequest:(该方法当url加载的时候会自动执行)
    • 网页代码

    <a href="client://addImg/headImg">点我调用OC方法</a>
    • Objective-C 核心代码

    #pragma mark UIWebViewDelegate 方法
    - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    
        // 可以直接拿到发送请求的网址
        NSString *urlStr = request.URL.absoluteString;
        
        if ([urlStr hasPrefix:@"client://"]) { // 判断请求是不是以 client:// 开头
            
            //获得去除请求头的 url 路径
            NSString *urlContent = [urlStr substringFromIndex:[@"client://" length]];
            
            //用 / 来拆分字符串
            NSArray *urls = [urlContent componentsSeparatedByString:@"/"];
            
            NSString *funName = [NSString stringWithFormat:@"%@:", urls[0]]; // 从url获取方法名,带参数的方法,加冒号
            
            SEL callFun = NSSelectorFromString(funName);
            
            //取消警告
            # pragma clang diagnostic push
            # pragma clang diagnostic ignored "-Warc-performSelector-leaks"
            
            [self performSelector:callFun withObject:urls[1]]; // 调用 OC 中的方法,并且传递参数
            
            return NO;  
        }
        
        return YES;
    }
    
    #pragma mark 此方法通过网页调用
    -(void)addImg:(NSString *) headImg {
    
        NSLog(@"通过网页调用OC方法:%@",headImg);
    }

    三、Objective-C 注入JS到网页

    • Objective-C 核心代码

    - (void)jsClick {  
        [self.webView stringByEvaluatingJavaScriptFromString:@"var script = document.createElement('script');"  
         "script.type = 'text/javascript';"  
         "script.text = "function myFunction() { "   //定义myFunction方法  
         "var field = document.getElementsByName('word')[0];"  
         "field.value='WWDC2014';"  
         "document.forms[0].submit();"  
         "}";"  
         "document.getElementsByTagName('head')[0].appendChild(script);"];  //添加到head标签中  
      
        [self.webView stringByEvaluatingJavaScriptFromString:@"myFunction();"];  
    }
  • 相关阅读:
    结对编程:黄金点小游戏
    在win7环境下如何安装Microsoft Visual Studio
    软件工程第一次作业
    Android关于保存数据(Saving data)
    Android bitmap和canvas小记(转)
    java/android开发中删除文件
    博客园的第一篇
    安卓初学者必看实例,(计算圆面积)
    安卓初学者必看实例,(文件管理器简单实现)
    安卓初学者必看实例,(访问sqlite)
  • 原文地址:https://www.cnblogs.com/duke-cui/p/11099138.html
Copyright © 2011-2022 走看看