JS-OC交互专题1-截取网站字符串

oc文件

- (void)viewDidLoad {
    [super viewDidLoad];
    _webView.delegate = self;
    _webView.backgroundColor = [UIColor clearColor];
    _webView.scalesPageToFit =YES;
    NSString *basePath = [[NSBundle mainBundle]bundlePath];
    NSString *helpHtmlPath = [basePath stringByAppendingPathComponent:@"jsIOS.html"];
    NSURL *url = [NSURL fileURLWithPath:helpHtmlPath];
    NSURLRequest *request=[NSURLRequest requestWithURL:url];
    [_webView loadRequest:request];
}
//html页面的js动作触发时运行
- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType
{
    //获取请求的绝对路径.
    NSString *urlString = [[request URL] absoluteString];
    urlString = [urlString stringByRemovingPercentEncoding];
    NSLog(@"urlString=%@",urlString);
    //提交请求时候分割参数的分隔符
    NSArray *urlComps = [urlString componentsSeparatedByString:@":@@"];
    if([urlComps count] && [[urlComps objectAtIndex:0] isEqualToString:@"objc"]){
        NSArray *arrFucnameAndParameter = [(NSString*)[urlComps objectAtIndex:1] componentsSeparatedByString:@":/"];
        NSString *funcStr = [arrFucnameAndParameter objectAtIndex:0];
        
        if (1 == [arrFucnameAndParameter count]){
            // 没有参数
            if([funcStr isEqualToString:@"doFunc1"]){
                /*调用本地函数1*/
                NSLog(@"doFunc1");
            }
        }
        else{
            //有参数的
            if([funcStr isEqualToString:@"getParam1:withParam2:"]){
                [self getParam1:arrFucnameAndParameter[1] withParam2:arrFucnameAndParameter[2]];
                NextViewController * vc = [[NextViewController alloc]init];
                [self presentViewController:vc animated:YES completion:nil];
            }
        }
        return NO;
    }
    return TRUE;
}
-(void)getParam1:(NSString*)str1 withParam2:(NSString*)str2
{
    NSLog(@"收到html传过来的参数:str1=%@,str2=%@",str1,str2);
}


jsIOS.html

</DOCTYPE html>
<html>  
    <head>  
        <meta content="text/html; charset=utf-8" http-equiv="content-type">  
        <title>js调用oc</title>  
        <script type="text/javaScript">  
            function testClick(cmd)  
            {
                var str1=document.getElementById("text1").value;  
                var str2=document.getElementById("text2").value;
                window.location.href="objc:@@"+cmd+":/"+EncodeUtf8(str1)+":/"+EncodeUtf8(str2);  
            }  
          
            // 字符串转换utf-8  
            function EncodeUtf8(s1)  
            {  
                // escape函数用于对除英文字母外的字符进行编码。如“Visit W3School!”->"Visit%20W3School%21"  
                var s = escape(s1);  
                var sa = s.split("%");//sa[1]=u6211  
                var retV ="";  
                if(sa[0] != "")  
                {  
                    retV = sa[0];  
                }  
                for(var i = 1; i < sa.length; i ++)  
                {  
                    if(sa[i].substring(0,1) == "u")  
                    {  
                        retV += Hex2Utf8(Str2Hex(sa[i].substring(1,5)));  
                        if(sa[i].length>=6)  
                        {  
                            retV += sa[i].substring(5);  
                        }  
                    }  
                    else retV += "%" + sa[i];  
                }  
                return retV;  
            }  
            function Str2Hex(s)  
            {  
                var c = "";  
                var n;  
                var ss = "0123456789ABCDEF";  
                var digS = "";  
                for(var i = 0; i < s.length; i ++)  
                {  
                    c = s.charAt(i);  
                    n = ss.indexOf(c);  
                    digS += Dec2Dig(eval(n));  
                      
                }  
                //return value;  
                return digS;  
            }  
            function Dec2Dig(n1)  
            {  
                var s = "";  
                var n2 = 0;  
                for(var i = 0; i < 4; i++)  
                {  
                    n2 = Math.pow(2,3 - i);  
                    if(n1 >= n2)  
                    {  
                        s += '1';  
                        n1 = n1 - n2;  
                    }  
                    else  
                    s += '0';  
                      
                }  
                return s;  
                  
            }  
            function Dig2Dec(s)  
            {  
                var retV = 0;  
                if(s.length == 4)  
                {  
                    for(var i = 0; i < 4; i ++)  
                    {  
                        retV += eval(s.charAt(i)) * Math.pow(2, 3 - i);  
                    }  
                    return retV;  
                }  
                return -1;  
            }  
            function Hex2Utf8(s)  
            {  
                var retS = "";  
                var tempS = "";  
                var ss = "";  
                if(s.length == 16)  
                {  
                    tempS = "1110" + s.substring(0, 4);  
                    tempS += "10" +  s.substring(4, 10);  
                    tempS += "10" + s.substring(10,16);   
                    var sss = "0123456789ABCDEF";   
                    for(var i = 0; i < 3; i ++)   
                    {   
                        retS += "%";   
                        ss = tempS.substring(i * 8, (eval(i)+1)*8);   
                          
                          
                          
                        retS += sss.charAt(Dig2Dec(ss.substring(0,4)));   
                        retS += sss.charAt(Dig2Dec(ss.substring(4,8)));   
                    }   
                    return retS;   
                }   
                return "";   
            }  
        </script>  
    </head>  
    <body>  
        <p><input type="text" id="text1" value="我来自ios苹果"/></p>  
        <p><input type="text" id="text2" value="我来自earth地球"/></p>  
      <p><input type="button" id="enter" value="enter" οnclick="testClick('getParam1:withParam2:');"/></p>  
    </body>  
</html>




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值